Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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 如何更改循环中初始化的Tkinter按钮的文本_Python_Button_Tkinter - Fatal编程技术网

Python 如何更改循环中初始化的Tkinter按钮的文本

Python 如何更改循环中初始化的Tkinter按钮的文本,python,button,tkinter,Python,Button,Tkinter,我试图在tkinter中创建一个按钮列表,当按下按钮时,将按钮中的文本从“开”更改为“关”,然后再返回 我不知道如何更改按钮上的文本,因为当tkinter按钮存储在列表或数组中时,它们缺乏访问和更改的能力 这是我的密码 import Tkinter as tk button = {} def toggle_text(button_number): print(button_number) if (button[button_number][1] == "On"):

我试图在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()
我已经尝试了数组和字典,都没有工作,任何帮助将不胜感激

我修复了你的代码

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(行=i,列=1)
返回
None
。因此,button dict将保存一个None值,而不是对创建的按钮的引用。其他的变化都很小,只是为了使切换工作,应该很容易理解。希望能有帮助


第二个重要的事情是,在这一行中,您正在创建元组。元组是不可变的,因此以后不能更改“开”->“关”和“关”->“开”。我把它改成了一张单子。这就解决了不变性的问题

感谢Marcin的帮助,这非常完美,正是我希望我的代码能够做到的。我不知道网格返回值,我会记住这一点@罗斯。别担心。这同样适用于
pack()
,所以请记住这一点。当我运行此脚本时,它在创建界面时是否调用了toggle text函数?还是只按按钮?编辑不,不抱歉,这很容易理解test@Ross只有当你按的时候。