-1
我想在tkinter中創建一個自定義小部件,以便在實例化時顯示標籤和輸入框。示例我創建了一個名爲entry的類,並調用爲.. entry('name',master),這將顯示一個標籤,其中文本作爲主入口框旁邊的主體。 我已經成功地做到了這一點,但我的問題是幾何管理器。他們似乎都搞砸了一切在tkinter中創建一個自定義小部件
我想在tkinter中創建一個自定義小部件,以便在實例化時顯示標籤和輸入框。示例我創建了一個名爲entry的類,並調用爲.. entry('name',master),這將顯示一個標籤,其中文本作爲主入口框旁邊的主體。 我已經成功地做到了這一點,但我的問題是幾何管理器。他們似乎都搞砸了一切在tkinter中創建一個自定義小部件
你的部件應該子類Frame
。在框架內,您可以使用任何您想要的幾何管理器,而不會影響任何其他代碼。這個widget類不是而是本身就是grid
,pack
或place
,這是創建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()
您需要發佈一些代碼,使實際的錯誤,這是非常困難的,以幫助只是你給的信息 –