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 ...