使用Pyzo IDE的变量类(StringVar,IntVar)的麻烦

时间:2017-02-20 08:38:55

标签: python user-interface tkinter pyzo

我一直在尝试制作一个简单的GUI,并且一直在通过tkinter的各种功能。但是,我不能为我的生活弄清楚为什么这不起作用。

from tkinter import Tk, Label, Button, Radiobutton,IntVar,StringVar

class TestGUI:
    def __init__(self, master):
        self.master = master
        master.title("Test GUI")

        self.mode = IntVar()

        self.modetext = StringVar()
        self.modetext.set("What does this do?")

        self.modelabel = Label(master,textvariable=self.modetext)
        self.modelabel.pack()

        self.close_button = Button(master, text="Close", command=master.destroy)
        self.close_button.pack()

        R1 = Radiobutton(master, text="Mode 1", variable=self.mode, value=0, command=self.modeset)
        R1.pack()

        R2 = Radiobutton(master, text="Mode 2", variable=self.mode, value=1, command=self.modeset)
        R2.pack()

        R3 = Radiobutton(master, text="Mode 3", variable=self.mode, value=2, command=self.modeset)
        R3.pack()

    def modeset(self):
        self.modetext.set("Mode is " + str(self.mode.get()))
        print(self.mode.get())

root = Tk()
T_GUI = TestGUI(root)
root.mainloop()

所做的,据我所知,显示三个单选按钮设置模式的值,并在标签中显示“Mode is [mode]”并打印值当选择一个时的模式。

相反,标签永远不会显示,选择单选按钮不会更改模式的值。

有人能给我一些关于发生了什么的线索吗?

1 个答案:

答案 0 :(得分:0)

查看您的解释,StringVarIntVar会导致问题。

在其上指定master可以解决您的问题。

self.mode = IntVar(master=self.master)
self.modetext = StringVar(master=self.master)

与Pyzo有关的可能是因为在大多数IDE中,省略master不会导致任何问题。