【发布时间】:2015-08-04 02:25:16
【问题描述】:
所以我试图在 python tkinter 中处理两个窗口,它们可以编辑包含某些图像路径的 xml 文件,问题是读取文件的函数在我的两个类窗口的 __init__ 中,所以每当我在窗口之间切换,出现相同的图像。我的问题是:有什么方法可以重新启动课程以便 __init__ 运行?
我认为问题出在show_frame 函数内,因为tkraise 不运行类中的函数,而只是将类中的任何内容弹出到顶部。
class xmleditApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
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 (FirstWindow, SecondWindow):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(FirstWindow)
def show_frame(self, cont):
frame=self.frames[cont]
frame.tkraise()
这是我想在返回时自动更新的类:
class FirstWindow(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
secondwindow=tk.Button(self,text="edit xml",command=lambda: controller.show_frame(SecondWindow))
secondwindow.grid(row=3,column=0)
def getimagepath():
doc = parse('pruebasXML.xml')
paths = doc.getroot()
path = paths.findall('path')
pasthlist = []
for elem in range (0,len(path)):
pathlist+=[[]]
for tag in range (0,11):
pathlist[elem]+=[path[elem][tag].text]
return createbutton(pasthlist)
def createbutton(lst):
for elem in range(0,len(lst)):
buttonName=elem
photo=tk.PhotoImage(file=lst[elem][0]+'.gif')
buttonName=tk.Button(self, image=photo)
buttonName.grid(row=2, column=elem)
buttonName.image=photo
if os.path.exists('pathsXML.xml')==True:
getimagepath()
【问题讨论】:
-
这样安全吗?我听说调用 init 时会出现很多问题,我还需要在括号中写上父级和控制器吗? @fhdrsdg
-
你为什么不把逻辑移出
__init__呢? -
我会试一试,告诉你进展如何
-
当我将它移出 init 时,我收到一条错误消息,提示 createbutton 不存在
-
定义
createbutton与__init__同级时,应定义为def createbutton(self, lst):,调用为self.createbutton(some_list)
标签: python class tkinter window