Python 如何禁用该按钮?(图形用户界面)
我正在制作一个简单的计算器,除了一个函数外,我已经实现了所有的函数。 如你所知,在新数字出现之前,圆点只能使用一次。所以我想在使用一次(.)按钮后将其禁用,并在使用symbol或C时使其再次可用。 我正在考虑使用configure方法更改按钮文本 这是我的密码:Python 如何禁用该按钮?(图形用户界面),python,tkinter,Python,Tkinter,我正在制作一个简单的计算器,除了一个函数外,我已经实现了所有的函数。 如你所知,在新数字出现之前,圆点只能使用一次。所以我想在使用一次(.)按钮后将其禁用,并在使用symbol或C时使其再次可用。 我正在考虑使用configure方法更改按钮文本 这是我的密码: 从tkinter导入* w1=Tk() w1.标题(“我的计算器”) 显示=输入(w1,宽度=33,bg=“黄色”) 显示.grid(行=0,列=0,列span=5) btn_列表=[ "7","8","9","C",, '4','5'
从tkinter导入*
w1=Tk()
w1.标题(“我的计算器”)
显示=输入(w1,宽度=33,bg=“黄色”)
显示.grid(行=0,列=0,列span=5)
btn_列表=[
"7","8","9","C",,
'4','5','6','*','',
'1','2','3','-','',
'0','.','=','+','']
索引_行=1
索引_col=0
def单击(按钮):
如果按钮==“=”:
value=eval(show.get())
s=str(值)
显示。删除(0,“结束”)
显示.插入(结束,s)
elif按钮==“C”:
显示。删除(0,“结束”)
其他:
显示.插入(结束,按钮)
对于btn_列表中的btn_文本:
def go(k=btn_文本):
单击(k)
钮扣(
w1,文本=btn_文本,宽度=5,命令=go
).grid(行=索引行,列=索引列)
索引_col+=1
如果索引列>4:
索引_行+=1
索引_col=0
w1.mainloop()
最简单的方法是使用tkinter变量并跟踪它
var = StringVar()
show = Entry(w1, width=33, bg="yellow", textvariable=var)
def validate(*args):
if var.get().count('.') > 1:
var.set(var.get()[:-1])
var.trace('w',validate)
实现这一点的方法不止一种,首先在列表中存储输入,或者将特定按钮存储为变量,等等。也有不同的方法可以轻松地循环阅读文本
更新,因为您的教授尚未教您以前的方法(至今):
这种循环方法真是绕圈子,直接使用嵌套循环即可获得所需的输出,甚至不需要制作索引行
和索引列
。永远不要把你的理解局限于你的教授或导师教给你的东西,准备好去探索和学习更多(也许你最终会教他:P)
请注意,单独使用
eval()
进行数学表达式是很糟糕的,它会带来一系列新的安全问题。您必须将按钮存储在列表或dict中,但您可以通过说btn[“state”]=“disabled”
来禁用任何按钮,将其设置回“正常”
以打开它。配置是另一个选择。像btn.config(state='disabled')和'normal'两种方式一样,1:生成一个函数并计算“.”和设置btn状态。2:输入验证。我很高兴你帮了我,真的很有帮助,但我想不出按钮的名称,,,有名称错误,,,你们能帮我多一点吗。。。?很抱歉,这个主意真的很酷!但遗憾的是,我不能用这个,因为我的教授还没有做过关于这个的讲座。。无论如何,谢谢你@daegalibboobboo22我已经更新了代码,并通过一些非常基本的作业和东西使之成为可能。@daegalibboobboo22我也希望你已经了解了eval()
的不良影响,如果你不只是在导师面前运行它,更值得一提的是不要在这里(赤脚)使用它。非常感谢你,我非常感动:c祝你有一个美好的一天!
def click(button):
..... # Same stuff
if show.get().count('.') >= 1:
dot_btn.config(state='disabled')
else:
dot_btn.config(state='normal')
for btn_text in btn_list:
def go(k=btn_text):
click(k)
if btn_text == '.':
dot_btn = Button(w1, text=btn_text, width=5, command=go)
dot_btn.grid(row=index_row, column=index_col)
else:
Button(
w1, text=btn_text, width=5, command=go
).grid(row=index_row, column=index_col)
index_col += 1
if index_col > 4:
index_row += 1
index_col = 0