2016-09-23 27 views
1

通过继承和访问父项,小部件是一些奇怪的错误。我需要使用与代码中所示相同的小部件创建三个部分。继承和访问父项有问题吗?

我不知道该怎么做才是真正有道理的。你有没有想法如何以最聪明的方式做到这一点?

import Tkinter as tk 

class Interface(tk.Frame): 
    def __init__(self, parent,start, ver_part, *args, **kwargs): 
     tk.Frame.__init__(self, parent, *args, **kwargs) 
     self.parent = parent 
     self.start = start 
     self.ver_part = ver_part 
     parent.title("Interface Window") 

     self.frame = tk.LabelFrame(parent, text="Verification Part - %s"%ver_part) 
     self.button = tk.Button(self.frame, text="%s"%ver_part) 

     self.frame.grid(row=0+start) 
     self.button.grid(row=0+start) 

class Main(Interface): 
    def __init__(self, parent, *args, **kwargs): 
     tk.Frame.__init__(self, parent, *args, **kwargs) 
     self.parent = parent 
     self.button_run = tk.Button(parent, text="Run", command=self.on_run()) 
     self.button_run.grid(row=3) 

    def on_run(self): 
     pass 

if __name__ == "__main__": 
    root = tk.Tk() 
    int_a = Interface(root,0, "A") 
    int_b = Interface(root,1, "B") 
    int_c = Interface(root,2, "C") 
    root.mainloop() 
+1

而究竟什么是错的部件?我运行了你的代码,并且有三个看起来一样的小部件,应该是什么奇怪的? –

+0

如果你想做同样的事情,你会这样做吗?你有没有想法如何以最聪明的方式做到这一点? –

+0

那么这是很大程度上的意见,所以脱口而出的SO.我不是tkinter的专家,但我想代码看起来不错。编辑:如果您需要代码审查而不是特定问题的答案,您可能需要查阅http://codereview.stackexchange.com/。 –

回答

2

你给你的一个部件的父母parent而不是self

改变这一行:

self.frame = tk.LabelFrame(parent, text="Verification Part - %s"%ver_part) 

这样:

self.frame = tk.LabelFrame(self, text="Verification Part - %s"%ver_part) 

一旦你这样做,你需要调用packplacegrid上的Interface的单个实例。

例如:

if __name__ == "__main__": 
    ... 
    int_a.pack(side="top", fill="both", expand=True) 
    int_b.pack(side="top", fill="both", expand=True) 
    int_c.pack(side="top", fill="both", expand=True)