2015-05-27 48 views
-1

我想在tkinter中創建一個自定義小部件,以便在實例化時顯示標籤和輸入框。示例我創建了一個名爲entry的類,並調用爲.. entry('name',master),這將顯示一個標籤,其中文本作爲主入口框旁邊的主體。 我已經成功地做到了這一點,但我的問題是幾何管理器。他們似乎都搞砸了一切在tkinter中創建一個自定義小部件

+1

您需要發佈一些代碼,使實際的錯誤,這是非常困難的,以幫助只是你給的信息 –

回答

2

你的部件應該子類Frame。在框架內,您可以使用任何您想要的幾何管理器,而不會影響任何其他代碼。這個widget類不是而是本身就是grid,packplace,這是創建widget的函數的作用。每個創建小部件的小部件或函數都只應該擔心佈置其子項。

下面是一個創建幾個不同的自定義小部件的示例。每次使用不同的幾何形狀經理說明他們不互相干擾:

try: 
    # python 3.x 
    import tkinter as tk 
except ImportError: 
    # python 2.x 
    import Tkinter as tk 


class CustomWidget(tk.Frame): 
    def __init__(self, parent, label, default=""): 
     tk.Frame.__init__(self, parent) 

     self.label = tk.Label(self, text=label, anchor="w") 
     self.entry = tk.Entry(self) 
     self.entry.insert(0, default) 

     self.label.pack(side="top", fill="x") 
     self.entry.pack(side="bottom", fill="x", padx=4) 

    def get(self): 
     return self.entry.get() 

class Example(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.label = tk.Label(self) 
     self.e1 = CustomWidget(self, "First Name:", "Inigo") 
     self.e2 = CustomWidget(self, "Last Name:", "Montoya") 
     self.submitButton = tk.Button(self, text="Submit", command=self.submit) 

     self.e1.grid(row=0, column=0, sticky="ew") 
     self.e2.grid(row=1, column=0, sticky="ew") 
     self.label.grid(row=2, column=0, sticky="ew") 
     self.submitButton.grid(row=4, column=0) 

     self.grid_columnconfigure(0, weight=1) 
     self.grid_rowconfigure(2, weight=1) 

    def submit(self): 
     first = self.e1.get() 
     last = self.e2.get() 
     self.label.configure(text="Hello, %s %s" % (first, last)) 

if __name__ == "__main__": 
    root = tk.Tk() 
    Example(root).place(x=0, y=0, relwidth=1, relheight=1) 
    root.mainloop() 
相關問題