-1

私は一般的にpythonとtkinterに不慣れです。私はおそらく約1年ほどプログラミングをしており、それが正しい方法だと聞いたので、各tkinterトップレベルウィンドウを独自のクラスにしようと試み始めました。

コンテンツを追加するためのボタンが付いたツリービューを持つプログラムを作成しています。ボタンをクリックすると、ユーザーがコンテンツを入力できる新しいウィンドウが開きます。私が抱えている問題は、ツリービューを更新するために最初のウィンドウをインスタンス化する必要があるときです.最初のウィンドウのすべてのウィジェットを2倍にしているようです. これにより、それが蓄積し続け、奇妙に見えます。

これは正常ですか、それとももっと良い方法がありますか?

ありがとうございました。必要に応じて、写真やコードを投稿できます。

編集:短縮コード

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()
4

1 に答える 1