ttk.按钮状态更改有时不起作用

2024-10-03 00:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在构建一个程序,在试图更改ttk.Button()的状态时遇到了一个奇怪的响应。到目前为止,一切都很顺利,但后来我遇到了一些问题,并发现state选项实际上不是创建ttk.Button()时的选项。我知道如何使用Style()等更改它。然而,当创建ttk.Entry()对象时,它接受状态作为选项并相应地设置它。奇怪的反应是当你试图用另一个按钮改变状态时

这是一个代码,其中state被定义为disabled-这表明该选项已被接受。但该功能不起作用。至少对我来说

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

def change_state():
    if button1['state'] == 'disabled':
        button1['state'] = 'normal'
    elif button1['state'] == 'normal':
        button1['state'] = 'disabled'

button1 = ttk.Button(root, state='disabled', text='test')
button1.pack()

button2 = ttk.Button(root, text='change state', command=change_state)
button2.pack()

root.mainloop()

在这里,我做了一些随机修改,并在函数中添加了另一行

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

def change_state():
    print(button1['state'])
    if button1['state'] == 'disabled':
        button1['state'] = 'normal'
    elif button1['state'] == 'normal':
        button1['state'] = 'disabled'

button1 = ttk.Button(root, state='disabled', text='test')
button1.pack()

button2 = ttk.Button(root, text='change state', command=change_state)
button2.pack()

root.mainloop()

现在不知从何而来,这个函数起作用了。尽管首先什么都不应该起作用,因为state不被接受为选项,因此不能以标准方式进行配置。其他任何人在运行这两个版本时都有相同的响应。谁能解释一下发生了什么事?我认为同样的情况也适用于ttk.Entry(),也可能适用于其他人


Tags: textimporttkinter选项buttonrootchangepack
1条回答
网友
1楼 · 发布于 2024-10-03 00:27:57

button[state]返回的值不是python str,因此通过执行button1['state'] == 'disabled'的操作总是会出错。可以使用返回<class '_tkinter.Tcl_Obj'>type(button1['state'])进一步检查它

def change_state():
    if str(button1['state']) == 'disabled':
        button1['state'] = 'normal'
    elif str(button1['state']) == 'normal':
        button1['state'] = 'disabled'

相关问题 更多 >