我通常是python和tkinter的新手。我一直在編程大約一年左右,而且我剛開始嘗試讓每個tkinter窗口都是自己的課程,因爲我聽說這是正確的做法。頂級類的新實例使重疊的小部件
我正在製作一個程序,其中我有一個樹形視圖並帶有一個按鈕來添加內容。該按鈕打開一個允許用戶輸入內容的新窗口。我遇到的問題是,當我必須實例化第一個窗口來更新樹視圖時,它似乎將第一個窗口上的所有窗口小部件加倍。這導致它繼續建設,它看起來很奇怪。
這是正常還是有更好的方法來做到這一點?
謝謝。如有必要,我可以張貼圖片或我的代碼。
編輯:縮短代碼
from tkinter import *
from tkinter import ttk
class MainWindow:
Items = {'test': ['Material', '500']}
def __init__(self, master):
self.master = master
self.style = ttk.Style()
self.style.configure('TLabel', font=12)
ttk.Label(self.master, text="Items").grid(row=0, column=0, columnspan=3)
self.frmItems = ttk.Frame(self.master)
self.frmItems.grid(row=1, column=0, padx=5, pady=5, columnspan=3)
self.treeItems = ttk.Treeview(self.frmItems, columns=(0, 1, 2))
self.treeItems.column('#0', width=0, minwidth=0)
self.treeItems.column(1, width=80)
self.treeItems.column(2, width=80)
self.treeItems.heading(0, text="Name")
self.treeItems.heading(1, text="Type")
self.treeItems.heading(2, text="Price")
self.treeItems.grid(row=0, column=0)
self.itemscroll = ttk.Scrollbar(self.frmItems, command=self.treeItems.yview)
self.itemscroll.grid(row=0, column=1, sticky='ns')
self.treeItems.config(yscrollcommand=self.itemscroll.set)
ttk.Button(self.master, text="New", command=self.item_input_show).grid(row=2, column=0, padx=5, pady=5,
sticky='e')
ttk.Button(self.master, text="Edit").grid(row=2, column=1, padx=5, pady=5)
ttk.Button(self.master, text="Remove").grid(row=2, column=2, padx=5, pady=5, sticky='w')
def item_input_show(self):
ItemInput(self.master)
class ItemInput:
def __init__(self, master):
self.master = master
self.MainWindow = MainWindow(master)
self.topItemInput = Toplevel(self.master)
self.topItemInput.title("Input Item Properties")
def main():
root = Tk()
MainWindow(root)
root.mainloop()
if __name__ == "__main__":
main()
這是不正常的。你的代碼正在做一些事情來做這件事。沒有我們能夠看到再現問題的代碼,我們無法提供幫助。請閱讀並遵循以下建議:[mcve] –
我添加了代碼。對不起,我不能縮短它。我不確定是什麼原因造成的,但是這是我在特定程序中做錯了的事情。 –
請縮短它。這裏有太多不相關的代碼。例如,如果問題出現在小部件的外觀上,則不需要執行實際轉換的代碼。另外,不應該需要從文件讀取數據;例如,您可以對一行或兩行數據進行硬編碼。 –