MyApp
)root
)并初始化由两个框架组成的容器类FrameContainer
,即PageOne
和PageTwo
(请参阅相应的类)。 Back Home
上的按钮Page One
应该销毁类FrameContainer
的实例并再次显示对话框窗口。使用方法update()
和deiconify()
Page One
上的任何单选按钮都应更改变量rb_indx
的值 - 使用get()
IntVar
方法实现。{ var.set(1)
应突出显示' var1'按钮,但在我的情况下会突出显示var2
和var3
。get()
IntVar
方法在选择单选按钮时不会更新变量rb_indx
的值。 print rb_indx
总是给出1 PageOne
窗口时(在屏幕的一角),对话框窗口没有出现,但预计会出现...... # -*- 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()
答案 0 :(得分:1)
问题是您正在创建多个Tk
的实例。应用程序必须只有一个Tk
实例。发生的事情是var
属于第一个实例,但是您将它与属于第二个实例的单选按钮相关联。
如果您需要多个窗口,请创建一个根窗口,然后为所有其他窗口创建Toplevel
的实例。