【问题标题】:How to change text of Tkinter button initilised in a loop如何更改循环中初始化的 Tkinter 按钮的文本
【发布时间】:2015-04-16 11:22:41
【问题描述】:

我正在尝试在 tkinter 中创建一个按钮列表,当按下按钮时,将按钮中的文本从“开”更改为“关”,然后再返回。

我不知道如何更改按钮上的文本,因为当 tkinter 按钮存储在列表或数组中时,它们无法访问和更改。

这是我的代码

import Tkinter as tk

button = {}

def toggle_text(button_number):

    print(button_number)

    if (button[button_number][1] == "On"):
        button.configure(text = "Coil %d is Off" %button_number)
    else: 
        button.configure(text = "Coil %d is On" %button_number)

root = tk.Tk()
root.title("Click the Buttons to change the state of the coil")

for i in range(1,13):

    button[i]  = tk.Button(text="Coil %d is On" %i , width=50, command=lambda i=i: toggle_text(i)).grid(row = i, column = 1), "Off"

root.mainloop()

数组和字典我都试过了,都不管用,不胜感激!

【问题讨论】:

    标签: python button tkinter


    【解决方案1】:

    我修复了你的代码。

    import Tkinter as tk
    
    
    
    button = {}
    
    def toggle_text(button_number):
        print(button_number)
    
        if (button[button_number][1] == "On"):
            button[button_number][0].configure(text = "Coil %d is Off" %button_number)
            button[button_number][1]='Off'
        else:         
            button[button_number][0].configure(text = "Coil %d is On" % button_number)
            button[button_number][1]='On'
    
    
    root = tk.Tk()
    root.title("Click the Buttons to change the state of the coil")
    
    for i in range(1,13):
        button[i]  = [tk.Button(text="Coil %d is On" %i , 
                               width=50, 
                               command=lambda i=i: toggle_text(i)), "On"]
        button[i][0].grid(row = i, column = 1)
    
    
    root.mainloop()
    

    主要问题是这一行:

    button[i]  = tk.Button(text="Coil %d is On" %i , width=50, command=lambda i=i: toggle_text(i)).grid(row = i, column = 1), "Off"
    

    grid(row = i, column = 1) 返回None。结果按钮 dict 将保存一个 None 值,而不是对创建的按钮的引用。其他更改很小,只是为了使切换工作并且应该易于理解。希望对您有所帮助。

    第二个重要的事情是在这一行中你正在创建元组。元组是不可变的,因此以后不能更改 'On'->'Off' 和 'Off'->'On'。我将其更改为列表。这解决了不变性的问题。

    【讨论】:

    • 感谢 Marcin 的帮助,这非常完美,正是我想要我的代码做的。我不知道网格返回值,我会记住这一点!
    • @Ross。不用担心。 pack() 也是如此,所以请记住这一点。
    • 当我运行这个脚本时,它会在创建界面时调用切换文本函数吗?还是仅在按下按钮时?编辑。不,很容易测试并不抱歉
    • @Ross 仅在您按下时。
    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2020-02-20
    • 2016-10-02
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多