Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何禁用该按钮?(图形用户界面)_Python_Tkinter - Fatal编程技术网

Python 如何禁用该按钮?(图形用户界面)

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'

我正在制作一个简单的计算器,除了一个函数外,我已经实现了所有的函数。 如你所知,在新数字出现之前,圆点只能使用一次。所以我想在使用一次(.)按钮后将其禁用,并在使用symbol或C时使其再次可用。 我正在考虑使用configure方法更改按钮文本

这是我的密码:

从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