2017-10-17 28 views
0

私はちょうどpythonとtkinterウィジェットを使ってアプリを作った。
TkとToplevelウィジェットにはラベル、フレーム、ボタンなどがあります。
しかし、それは何千ものコードを含んでいて、複数の解像度をサポートしているときは、すべてのウィジェットのサイズを変更するのは本当に面倒です。

既存のTkinter Tk()とToplevel()ウィジェットとその子ウィジェットの解像度を拡大する方法はありますか? (ズームイン)

もしそうでなければ、比率の等しいPythonアプリケーションの複数の解像度をサポートするにはどうすればよいでしょうか?

ご迷惑をおかけして申し訳ございません。Python - 既存のTkinter Tk()とToplevel()ウィジェットの解像度を拡大する方法はありますか? (ズームイン)

答えて

1

はい、これは可能ですが、プログラムで使用したジオメトリマネージャによって異なります。あなたがウィジェット上.pack()を宣言するときに、属性の範囲を使用することができます(間違いなく「インテリジェント」GUI設計のための最も簡単なジオメトリ方法である).pack()方法については


。これらの属性は、(これらに限定されない)

以下が自動的に変更するかである場合、ウィンドウに合わせて拡大する三つのボタンのセットの一例を示すなど、padypadxanchorexpandfill開発時に使用されたサイズとは異なるサイズに初期化されています。あなたが機能Grid.columnconfigure()Grid.rowconfigureの利用を行う必要があります.grid()方法については

from tkinter import * 

root = Tk() 

btn1 = Button(root, text="btn1") 
btn2 = Button(root, text="btn2") 
btn3 = Button(root, text="btn3") 

btn1.pack(fill="both", expand=True) 
btn2.pack(fill="both", expand=True) 
btn3.pack(fill="both", expand=True) 

root.mainloop() 

。これらの両方には、weightという属性があります。この属性は、ウィンドウで空き容量が増えると余分なスペースを割り当てるためにどの行と列に優先順位を付けるべきかを決定します。すべての行と列をweightに設定すると、すべての行と列に同じスペースが与えられます。ウィジェットで.grid()と宣言するときには、sticky属性も使用する必要があります。

以下は、開発中に使用されたサイズと異なるサイズに変更または初期化された場合に自動的にウィンドウに収まるように3つのボタンのセットの例を示しています。

from tkinter import * 

root = Tk() 

for column in range(3): 
    Grid.columnconfigure(root, column, weight=1) 

for row in range(1): 
    Grid.rowconfigure(root, row, weight=1) 

btn1 = Button(root, text="btn1") 
btn2 = Button(root, text="btn2") 
btn3 = Button(root, text="btn3") 

btn1.grid(column=0, row=0, sticky=N+S+E+W) 
btn2.grid(column=1, row=0, sticky=N+S+E+W) 
btn3.grid(column=2, row=0, sticky=N+S+E+W) 

root.mainloop() 

.place()を使用すると、より多くの困難になる、あなたはボタンがに展開する必要があるとサイズを計算しますすべてのウィンドウのリサイズイベントでトリガーする機能のセットアップを持っている必要があります。

これは以下のようになります。

from tkinter import * 

class App: 
    def __init__(self, root): 
     self.root = root 
     self.button = Button(self.root, text="Button") 
     self.button.place(relx=0.5, rely=0.5, anchor="center") 
     self.root.bind("<Configure>", self.resize) 
    def resize(self, *args): 
     self.button.configure(width=self.root.winfo_width(), height=self.root.winfo_height()) 

root = Tk() 
App(root) 
root.mainloop() 

主観的に言えば、.pack()が容易になる傾向があり、しかし、このすべては、あなたがこれを実装するために入れて喜んでいるどのくらいの努力に降りてきますあなたの現在のプログラムと一緒に。

0

コメントできませんので、詳しいEthan回答に短いヒントを追加してください。ほとんどのGUIは、パック、グリッド、または両方の組み合わせでGUIのほとんどをデザインすることができます(ウィンドウのいずれかをフレームに配置し、グリッドまたは各フレームの中でパックを使用してウィジェットを配置します)。ウィンドウのサイズが変更されたときに、適切な場所とサイズの設定を調整できます。特別なケースのためにプレイヤーの使用を維持する(他のウィジェットの上にウィジェットをオーバーレイするなど)

関連する問題