私は一般にpythonとtkinterの新機能です。私は1年ほどぐらいプログラミングしていました。そして、それは正しい方法であると聞いたので、それぞれのウィンドウを独自のクラスにするようになってきました。トップレベルクラスの新しいインスタンスがオーバーラップウィジェットを作っています
私は、コンテンツを追加するボタンが付いたツリービューを持つプログラムを作っています。ボタンは、ユーザーが内容を入力できるようにする新しいウィンドウを開きます。私が抱えている問題は、ツリービューを更新するために最初のウィンドウをインスタンス化する必要があるときです。最初のウィンドウのすべてのウィジェットが倍増しているようです。これはそれを構築し続け、それは奇妙に見えます。
これは正常なのですか、それとも良い方法がありますか?
ありがとうございます。私は必要に応じて写真や自分のコードを投稿することができます。
編集:短縮コード
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] –
私はコードを追加しました。すみません、私はそれをもっと短くできませんでした。私はこれを引き起こしているのか分からないが、それは私が特定のプログラムで間違っていた何かだ –
それをもっと短くしてください。あまりにも無関係のコードがあるだけです。たとえば、問題がウィジェットの外観にある場合、実際の変換を行うコードは必要ありません。また、ファイルからデータを読み取る必要はありません。この例では、1行または2つのデータをハードコードすることができます。 –