使用tkinter切换按钮文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用tkinter切换按钮文本相关的知识,希望对你有一定的参考价值。

我是Python的新手,我不知道如何只设置一次变量,然后动态更改它。这是一个示例:

from tkinter import *
bt_text = "A"

root = Tk()

def switcher():
    print(bt_text)
    if bt_text == "A":
        bt_text = "B"
    else:
        bt_text = "A"



b=Button(root, justify = LEFT, command=switcher)
photo1=PhotoImage(file="background.gif")
b.config(image=photo1,text=bt_text, compound="center", width="50",height="20",borderwidth="0")
b.grid(row=2, column=0)

root.mainloop()

为什么会出现错误?

UnboundLocalError: local variable 'bt_text' referenced before assignment

以及为什么在这种情况下不会出现错误:

from tkinter import *
bt_text = "A"

root = Tk()

def switcher():
    print(bt_text)

b=Button(root, justify = LEFT, command=switcher)
photo1=PhotoImage(file="background.gif")
b.config(image=photo1,text=bt_text, compound="center", width="50",height="20",borderwidth="0")
b.grid(row=2, column=0)

root.mainloop()

我想给bt_text一个默认值,然后每次按下按钮时更改它。为什么不起作用?

答案

您需要引用全局变量bt_text,因为在函数“ switcher”中,您将访问未初始化的局部变量。您可以这样做:

from tkinter import *
bt_text = "A"

root = Tk()

def switcher():
    global bt_text
    print(bt_text)
    if bt_text == "A":
        bt_text = "B"
    else:
        bt_text = "A"



b=Button(root, justify = LEFT, command=switcher)
photo1=PhotoImage(file="background.gif")
b.config(image=photo1,text=bt_text, compound="center", width="50",height="20",borderwidth="0")
b.grid(row=2, column=0)

root.mainloop()

以上是关于使用tkinter切换按钮文本的主要内容,如果未能解决你的问题,请参考以下文章

tkinter - 使用按钮在帧之间来回切换

按钮点击后,Python tkinter在框架中显示文本

如何在 Kotlin 片段内的按钮之间切换片段?

在 Tkinter 中切换帧时出错

使用 tkinter 悬停时更改按钮颜色

如何使用 tkinter 中的按钮设置“Entry”小部件的文本/值/内容