python之tkinter 實現簡易計算器

2021-08-18 04:09:03 字數 3874 閱讀 9227

from tkinter import *

root=tk()

root.maxsize(300,400)

class createframe():

def __init__(self,frame,width,height):

self.frame=frame

self.width=width

self.height=height

def creat_frame(self):

creat_frame=frame(self.frame,width=self.width,height=self.height,bg='#ddd')

return creat_frame

class createbutton():

def __init__(self):

self.text=[['ce','c','x','^'],['*','/','-','+'],['0','1','2','3'],['4','5','6','7'],['8','9','.','=']]

# self.button=

def create_button(self,frame):

for i in range(0,5):

for j in range(0,4):

button1 =button(frame, text=self.text[i][j], width=8, height=2, bg='pink')

button1.grid(row=i, column=j, padx=3, pady=3)

frame.pack()

return button1

class creatlabel():

def label(self,frame):

label = label(frame, font=('微軟雅黑', 15),anchor='e',text='0')

label.pack( anchor='e')

frame.pack()

return label

class bindbtton():

# def __init__(self):

# self.lt=

# self.flage = false

def btton_class_bind(self,button,label,label_frist):

button.bind_class('button','',lambda e: self(e,label,label_frist))

def __call__(self,e,label,label_frist):

# 顯示運算表示式

def change():

if e.widget['text']=='.'and '.'in label['text']:

#判斷第乙個數是不是能加小數點

if '+'not in label['text']and '-'not in label['text']and '*'not in label['text']and '/'not in label['text']:

return

#判斷第二個數是否能加小數點

if label['text'].count('.')==1 :

label['text'] =label['text'] + e.widget['text']

# return label['text']

#按括號分割 判斷第二數以後的表示式是否能加小數點

for i in label['text'].split(')')[1:]:

# print(i)

if '.'in i and i.count('.')==1:

continue

else:

label['text'] += e.widget['text']

return label['text']

if label['text']=='0'and label['text']!='.':

label['text'] =e.widget['text']

else:

label['text']=label['text']+e.widget['text']

# 運算

def operation():

if e.widget['text']=='=':

if label['text'][-1] not in '+-*/=%^':

labe2['text']=eval(label['text'])

label['text'] ='0'

else:

labe2['text'] = eval(label['text'][:-1])

elif '+'in label['text']or '-'in label['text'] or '*'in label['text'] or '/'in label['text'] or '%'in label['text']or '^'in label['text']:

if e.widget['text']in '+-*/=%^':

if label['text'][-1] not in '+-*/=%^':

label['text']='('+label['text']+')'+e.widget['text']

# label['text'] ='('+str(eval(label['text']) )+')' + e.widget['text']

else:

label['text'] += e.widget['text']

else:

label['text']+=e.widget['text']

def equal():

pass

# 刪除操作

def delete():

if label['text'][-1]==')':

label['text'] = label['text'][1:-1]

if len(label['text'])!=1:

label['text']=label['text'][:-1]

else:

label['text']='0'

#清空操作

def clear():

label['text']='0'

labe2['text']='0'

#正負操作

# def fan():

# pass

if e.widget['text'] in '1234567890.':

change()

elif e.widget['text'] in ['c', 'ce']:

clear()

elif e.widget['text'] in '+-*/=%':

operation()

elif e.widget['text'] in 'x':

delete()

frame1=createframe(root,290,20).creat_frame()

label=creatlabel().label(frame1)

frame3=createframe(root,290,20).creat_frame()

labe2=creatlabel().label(frame3)

frame2=createframe(root,290,360)

frame=frame2.creat_frame()

button=createbutton().create_button(frame)

bindbtton().btton_class_bind(button,label,labe2)

root.mainloop()

Python模組之tkinter使用大全!

button乙個用來執行一條命令的簡單按鈕 canvas 結構化的圖形,用於繪製圖形 建立圖形編輯器以及實現自製的小構件 checkbutton 單機複選按鈕之間切換 entry 乙個文字輸入域 也稱為文字域或文字框 frame 包含其他小構件的乙個容器小構件 label 顯示文字或影象 menu ...

Python樂趣之tkinter歡迎介面

應用程式啟動一般都具有歡迎介面,一方面是展示開發者,另一方面則是為主程式初始化啟動爭取時間,主程式啟動時間過長會給人一種卡死的假象,有了歡迎介面就可以化解這一問題。利用python的tkinter,啟動雙線程,分別載入歡迎介面和主程式。本人沒有去查詢python是否有歡迎介面庫 因為想自己做乙個 所...

python之tkinter畫布 入門基礎學習

1.列表的建立使用 from tkinter import 匯入tkinter庫 root tk 建立視窗物件背景 root.title 畫布 list1 a b php b s f 建立兩個列表 list2 q w 1,3,5 listb listbox root 建立兩個列表元件 listb2 ...