0
複雑なダイアログ(10個以上のウィジェットを持つダイアログ、特に複数のフレームなどに配置されたダイアログ)を実装する場合、作成には多くのtkinter呼び出しが必要となり、 1つのメソッド内に保持されている場合は、読み込みと保守が困難です。一般的に、短い関数/メソッドは通常は長いものよりも優先されます。 Python、tkinter、複雑なダイアログとコード構造
import tkinter as tk
class Dialog:
def __init__(self, master):
self.__master = master
self.create_gui(master)
def create_gui(self, frame, title = None):
if title: frame.title(title)
group_a = self.create_group_a(frame)
group_a.grid(row=0, column=0, sticky="nsew")
group_b = self.create_group_b(frame)
group_b.grid(row=1, column=0, sticky="nsew")
frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)
frame.rowconfigure(1, weight=1)
def create_group_a(self, frame):
inner_frame = tk.LabelFrame(frame, text="Label")
text = self.create_text_with_scrollbar(inner_frame)
text.pack(fill="both")
return inner_frame
def create_group_b(self, frame):
button = tk.Button(frame, text="Button")
return button
def create_text_with_scrollbar(self, frame):
text_frame = tk.Frame(frame)
text_frame.grid_rowconfigure(0, weight=1)
text_frame.grid_columnconfigure(0, weight=1)
text = tk.Text(text_frame)
text.grid(row=0, column=0, sticky="nsew")
scrollbar = tk.Scrollbar(text_frame, command=text.yview)
scrollbar.grid(row=0, column=1, sticky="nsew")
text['yscrollcommand'] = scrollbar.set
return text_frame
if __name__ == "__main__":
master = tk.Tk()
Dialog(master)
tk.mainloop()
が任意の特定があります:メソッドの長さを制限する
私の現在のアプローチは、このようなトップレベルのウィジェットを返す1 method(parent_frame, other_options)
にダイアログ内のグループに属しているすべてのウィジェットの作成をカプセル化することですそのような場合のコード構造に関するガイドラインは?誰もそのようなコードをより良く構築する方法についてアドバイスをしていますか?
ありがとうございます! Brian OakleyもTkinterクラスからクラスを継承しています(http://stackoverflow.com/questions/17466561/best-way-to-structure-a-tkinter-application)。しかし、彼の答え(Shuleから)には、Frameなどを継承せず、フレームメンバーを持っている方がよい場合があるというコメントがあります。私の直感は同じことを私に伝えていますが、理由を説明することはできません。これは最初に質問をする1つの理由でした。私は質問を更新します。 – Robin
いいえ、私は質問を更新しません。 「tkinterクラスから継承するかどうか」という質問は、それまでに議論されてきたトピックです。ここ:http://stackoverflow.com/questions/7300072/inheriting-from-frame-or-not-in-a-tkinter-application。 – Robin