永发信息网

python gui界面问题,新手求教

答案:2  悬赏:40  手机版
解决时间 2021-03-10 18:43
from Tkinter import *
def frame(root,side):
w=Frame(root)
w.pack(side=side,expand=YES,fill=BOTH)
return w

def button(root,side,text,command=None):
w=Button(root,text=text,command=command)
w.pack(side=side,expand=YES,fill=BOTH)
return w

class Calculator(Frame):
def __init__(self):
Frame.__init__(self)
self.pack(expand=YES,fill=BOTH)
self.master.title("Simple Calculator")
self.master.iconname("calcl")

display=StringVar()
Entry(self,relief=SUNKEN,textvariable=display).pack(side=TOP,
expand=YES,fill=BOTH)

for key in ("123","456","789","-0."):
deyF=frame(self,TOP)
for char in key:
button(deyF,LEFT,char,lambda w=display,s="%s"%char: w.set\
(w.get()+s))

opsF=frame(self,TOP)
for char in "+-*/=":
if char=='=':
btn=button(opsF,LEFT,char)
btn.bind("",lambda e,s=self, w=display: \
s.clac(w),'+')
else:
btn=button(opsF,LEFT,char,lambda w=display,c=char: w.set\
(w.get()+' '+c+' '))

clearF=frame(self,BOTTOM)
button(clearF,LEFT,'Clr',lambda w=display: w.set(' '))

def clac(self,display):
try:
display.set(eval(display.get()))
except SyntaxError:
display.set("ERROR")
except ZeroDivisionError:
display.set("ZeroDivisionError")

if __name__=="__main__": Calculator().mainloop()

上面的代码是一个网上找到的python计算器界面,小弟python新手,想修改成一个界面,就是可以运行处计算器输入数字可以显示、同时也可以粘贴进去一串数字、点下面的clr不是归0了 而是运行其他的python代码,请问应该如何修改。首先+-*/可以全部删除掉 ,删除中间的一段代码就可以 实现,但是对于clr点击后的效果应该如何改?求高手赐教,QQ280435089 谢谢!

from Tkinter import *
def frame(root,side):
w=Frame(root)
w.pack(side=side,expand=YES,fill=BOTH)
return w
def button(root,side,text,command=None):
w=Button(root,text=text,command=command)
w.pack(side=side,expand=YES,fill=BOTH)
return w
class Calculator(Frame):
def __init__(self):
Frame.__init__(self)
self.pack(expand=YES,fill=BOTH)
self.master.title("Simple Calculator")
self.master.iconname("calcl")

display=StringVar()
Entry(self,relief=SUNKEN,textvariable=display).pack(side=TOP,
expand=YES,fill=BOTH)

for key in ("123","456","789","-0."):
deyF=frame(self,TOP)
for char in key:
button(deyF,LEFT,char,lambda w=display,s="%s"%char: w.set\
(w.get()+s))

opsF=frame(self,TOP)

clearF=frame(self,BOTTOM)
button(clearF,LEFT,'Clr',lambda w=display: w.set(' '))

def clac(self,display):
try:
display.set(eval(display.get()))
except SyntaxError:
display.set("ERROR")
except ZeroDivisionError:
display.set("ZeroDivisionError")

if __name__=="__main__": Calculator().mainloop()
最佳答案
绑定事件处理就可以了。
btn=button(opsF,LEFT,char)
btn.bind("",lambda e,s=self, w=display: \
s.clac(w),'+')

比如这里,lambda.....你换成你的函数名,就是将按钮的事件指向另一个函数了。
全部回答
嗯,怎么说呢。每一个gui程序都有一个称为顶层(toplevel)的窗口管理器用于管理那些窗口部件,如按钮,输入框之类的,这个窗口管理器就是这些下级部件的master,顶级窗口的master是none即,它自己管理自己。 回到你的问题,(1)第4行的master=none是表示application这个类的master默认为none,即它是顶层窗口。 (2)第13行中的app.master是返回当前顶层窗口的对象,然后再调用title这个方法设置title,master=none只是表明app是顶层窗口而已。 我自己理解的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
没卡可以在机子上转帐吗?
地球的资源还能用多久
苹果6s怎么快捷开关网络
怎样给鞋子消毒
每天苏打水的正常的摄入量
电脑qq空间里推荐好友怎么删掉?
308乘88的验算怎么验
仙莱线/福诏高速公路(路口)怎么去啊,有知道
求一张小放牛闵惠芬版的笛子简谱
中国移动4G手机连锁卖场海河丰源店地址有知道
关于高级中心地的说法正确的是A. 数目较多B.
这个T恤配上藏青色九分裤再加上黑色的休闲鞋
安装了ROOT手机变卡了怎么办
我比你女朋友漂亮……………怎么翻译英文……
中国移动手机专卖店邓元泰营业厅在哪里啊,我
推荐资讯
一般移动版的手机可以支持联通4G吗
求救我举哑铃手怎么不酸痛啊
优尼克幼儿园这个地址在什么地方,我要处理点
阀门在安装前应检查填料以及其压盖螺栓是否有
我该怎么办,现在一肚子的花花肠子?
初中经纬度线的图怎么看
张家口市小伙向网友求助
属猪和属虎了是不是相冲,是不是不能在一起
下中国象棋,对方如果“当头炮”,你就来一个
取卵后做头发了怎么办
ubuntu 16.04 编译android 7.1需要降低gcc版
民航行政工作具体是干什么工作的 月薪是多少
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?