Python/Tkinter:为什么IntVar的.get方法在单击不同的单选按钮时显示相同的值? 课程简介: 启动脚本时,将出现对话框窗口,要求您选择目录路径(classMyApp) 选择后-需要按下“开始监控”按钮。此操作将退出主窗口(root),并初始化由两个框架组成的容器类FrameContainer,即PageOne和PageTwo(请参见相应的类) 第一页上的按钮Back Home应销毁类FrameContainer的实例,并再次显示对话框窗口。此操作是使用方法update()和deiconify()实现的 选择第一页上的任何单选按钮都会改变变量rb_indx-这是通过IntVar的get()方法实现的 问题: 单选按钮的初始化方式错误。var.set(1)应该突出显示“var1”按钮,但是在我的例子中突出显示的是var2和var3 选择单选按钮时,IntVar的get()方法不会更新变量rb_indx的值打印rb_indx总是给出1 当通过[x](在屏幕的一角)关闭PageOne窗口时,对话框窗口不会出现,但预期 守则:

Python/Tkinter:为什么IntVar的.get方法在单击不同的单选按钮时显示相同的值? 课程简介: 启动脚本时,将出现对话框窗口,要求您选择目录路径(classMyApp) 选择后-需要按下“开始监控”按钮。此操作将退出主窗口(root),并初始化由两个框架组成的容器类FrameContainer,即PageOne和PageTwo(请参见相应的类) 第一页上的按钮Back Home应销毁类FrameContainer的实例,并再次显示对话框窗口。此操作是使用方法update()和deiconify()实现的 选择第一页上的任何单选按钮都会改变变量rb_indx-这是通过IntVar的get()方法实现的 问题: 单选按钮的初始化方式错误。var.set(1)应该突出显示“var1”按钮,但是在我的例子中突出显示的是var2和var3 选择单选按钮时,IntVar的get()方法不会更新变量rb_indx的值打印rb_indx总是给出1 当通过[x](在屏幕的一角)关闭PageOne窗口时,对话框窗口不会出现,但预期 守则:,python,tkinter,Python,Tkinter,问题是您正在创建多个Tk实例。一个应用程序必须只有一个Tk实例。实际情况是var属于第一个实例,但您将其与属于第二个实例的单选按钮相关联 如果需要多个窗口,请创建一个根窗口,然后为所有其他窗口创建Toplevel的实例。代码太多,我无法阅读。谢谢你的帮助!现在单选按钮工作正常。我只更改了以下几行:class FrameContainer(Tk.Toplevel):def init____;(self,parent):self.original_uframe=parent Tk.Toplevel.

问题是您正在创建多个
Tk
实例。一个应用程序必须只有一个
Tk
实例。实际情况是
var
属于第一个实例,但您将其与属于第二个实例的单选按钮相关联


如果需要多个窗口,请创建一个根窗口,然后为所有其他窗口创建
Toplevel
的实例。

代码太多,我无法阅读。谢谢你的帮助!现在单选按钮工作正常。我只更改了以下几行:class FrameContainer(Tk.Toplevel):def init____;(self,parent):self.original_uframe=parent Tk.Toplevel.__uinit(self)唯一剩下的问题是列表中的N3—当通过[x](屏幕的一角)关闭PageOne窗口时,对话框窗口(类MyApp的实例)没有出现,但是预计。。。你对我如何约束这次行动有什么想法吗?
# -*- coding: utf-8 -*-

try:
    # Python2
    import Tkinter as Tk
    from Tkinter import IntVar
    from tkFileDialog import askdirectory

except ImportError:
    # Python3
    import tkinter as Tk
    from tkinter import IntVar
    from tkinter.filedialog import askdirectory

LARGE_FONT=("Verdana", 12)

########################################################################

class FrameContainer(Tk.Tk):

    def __init__(self, parent):

        self.original_frame = parent   

        Tk.Tk.__init__ (self)
        container = Tk.Frame(self)

        container.pack(side="top", fill="both", expand = True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight =1)

        self.frames = {}

        for F in (PageOne, PageTwo): 

            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(PageOne)

    def show_frame (self, cont):

        frame=self.frames[cont]
        frame.tkraise()

    def onClose(self):

        self.destroy()
        self.original_frame.show()  

class PageOne(Tk.Frame):

    def __init__(self, parent, controller):

        Tk.Frame.__init__(self, parent)

        label = Tk.Label(self, text="Page One", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

        button1=Tk.Button(self, text="Back to Home", command=lambda: controller.onClose())
        button1.pack()

        button2=Tk.Button(self, text="Page Two", command=lambda: controller.show_frame(PageTwo))
        button2.pack()

        def get_button_indx(): 

            global rb_indx
            rb_indx=var.get()
            print rb_indx

        var.set(1)

        names_tuple = ('var1', 'var2', 'var3')

        for col_numb in range (1,len(names_tuple)+1):
            radio = Tk.Radiobutton(self, text=names_tuple[col_numb-1], variable=var, value=col_numb, command=get_button_indx)
            radio.pack()

class PageTwo(Tk.Frame):

    def __init__(self, parent, controller):

        Tk.Frame.__init__(self, parent)

        label = Tk.Label(self, text="Page Two", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

        button1=Tk.Button(self, text="Back to Home", command=lambda: controller.onClose())
        button1.pack()

        button2=Tk.Button(self, text="Page One", command=lambda: controller.show_frame(PageOne))
        button2.pack()

class MyApp(object):

    def __init__(self, parent):

        self.root = parent
        self.root.title("Start page")
        self.frame = Tk.Frame(parent)
        self.frame.pack()

        def choosedir():   

            global path_usr_var 
            path_usr_var = askdirectory()
            print path_usr_var

        button1 = Tk.Button(self.frame, text="Select Directory", command=choosedir)
        button1.pack(pady=10, padx=10)

        button2 = Tk.Button(self.frame, text="Start Monitoring", command=self.openFrame)
        button2.pack(pady=10, padx=10)

    def hide(self):
        self.root.withdraw()

    def openFrame(self):
        self.hide()
        firstFrame = FrameContainer(self)

    def show(self):
        self.root.update()
        self.root.deiconify()

########################################################################

if __name__ == "__main__":

    root = Tk.Tk()
    root.geometry("800x600")
    var = IntVar()
    app = MyApp(root)
    root.mainloop()