【问题标题】:Issue with TKinter widet binding [duplicate]TKinter 小部件绑定问题[重复]
【发布时间】:2021-07-26 10:23:48
【问题描述】:

我是 TKinter 的新手,我正在测试 Radio Widget。我正在使用这个简单的程序来测试我是否可以正确使用它。

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
from tkinter import Tk, Text

# root window
root = tk.Tk()
root.geometry('300x220')
root.resizable(False, False)
root.title('Radio Button Demo')

#Display result
def display_radio():
    showinfo(
        title = "Result",
             message = selectable_numbers.get()
    )

#Selectable options
selectable_numbers = tk.StringVar()
numbers = (('1', 'One'),
           ('2', 'Two'),
           ('3', 'Three'),
           ('4', 'Four'))

#Label
simple_label = ttk.Label(text = "Select a number")
simple_label.pack(fill='x', padx=5, pady=5)

#Creating the radio buttons with iteration
for number in numbers:
    r = ttk.Radiobutton(root,
                        text = number[0],
                        value = number[1],
                        variable = selectable_numbers
    )
    r.pack(fill='x', padx = 5, pady = 5)

#Button to display
display_button = ttk.Button(root,
                            text = "Display Number")
display_button.pack(fill='x', padx=5, pady=5)

display_button.bind('<Any-Button>', display_radio(), add='+')

root.mainloop()

当我运行这个程序时,消息框立即出现,其中没有任何内容,然后按钮不再起作用。我将此代码与一个可以工作的示例代码进行比较,据我所知它们在功能上是相同的。

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo

# root window
root = tk.Tk()
root.geometry('300x220')
root.resizable(False, False)
root.title('Radio Button Demo')


def show_selected_size():
    showinfo(
        title='Result',
        message=selected_size.get()
    )


selected_size = tk.StringVar()
sizes = (('Small', 'S'),
         ('Medium', 'M'),
         ('Large', 'L'),
         ('Extra Large', 'XL'),
         ('Extra Extra Large', 'XXL'))

# label
label = ttk.Label(text="What's your t-shirt size?")
label.pack(fill='x', padx=5, pady=5)

# radio buttons
for size in sizes:
    r = ttk.Radiobutton(
        root,
        text=size[0],
        value=size[1],
        variable=selected_size
    )
    r.pack(fill='x', padx=5, pady=5)

# button
button = ttk.Button(
    root,
    text="Get Selected Size",
    command=show_selected_size)

button.pack(fill='x', padx=5, pady=5)


root.mainloop()

为什么按钮在我的代码中不起作用?我已经用命令绑定和事件绑定测试了我的代码,它们都有相同的结果。

【问题讨论】:

  • 代替display_button.bind(..., display_radio()) 使用:display_button.bind(..., display_radio)

标签: python tkinter python-3.7 ttk


【解决方案1】:

在您的第一个程序中,您将&lt;Any-Button&gt; 绑定到display_radio

函数display_radio从绑定接收事件所以改变

def display_radio( ):def display_radio( event ): 并改变

display_button.bind('&lt;Any-Button&gt;', display_radio(), add='+')

display_button.bind('&lt;Any-Button&gt;', display_radio, add='+')

这将解决它。

我发现你的第二个程序没有问题,按预期工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2019-01-03
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多