web-dev-qa-db-ja.com

Python-グリッドマネージャーを使用した複数のフレーム

Tkinterモジュール(Python 2.7)の機能を使用して、7行5列のグリッドに配置された8つのウィジェットを持つGUIを作成しようとしています(画像を含めなかったため申し訳ありません。ダイアログボックスでは、保存した画像を参照してアップロードします)。

(ウィジェット、start_row、start_col、row_span、column_span):

  1. (「ボタン0」、6、0、1、1)
  2. (「ボタン1」、6、1、1、1)
  3. (「ボタン2」、6、2、1、1)
  4. (「ボタン3」、6、3、1、1)
  5. (「ボタン4」、6、4、1、1)
  6. ( "Frame1"、0、0、3、2)
  7. ( "Frame2"、2、0、3、2)
  8. (「Frame3」、0、3、6、3)

それでも、コードを実行すると、ボタンとフレーム3は正常にレンダリングされますが、フレーム1は垂直にフレーム2を押しつぶします。任意の提案をいただければ幸いです。 (推奨されるStackOverflowの回答を読みましたが、私の問題を解決するために使用できる情報を提供するものはないようです。また、オンラインで広範囲に検索したが、役に立たなかった。)

from Tkinter import *

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master.title("Grid Manager")

        self.master.rowconfigure(0, weight=1)
        self.master.columnconfigure(0, weight=1)

        for i in range(5):
            self.master.button = Button(master, text = "Button {0}".format(i))
            self.master.button.grid(row=6, column=i, sticky=W+E)

        self.Frame1 = Frame(master, bg="red")
        self.Frame1.grid(row = 0, column = 0, rowspan = 3, columnspan = 2, sticky = W+E+N+S) 
        self.Frame2 = Frame(master, bg="blue")
        self.Frame2.grid(row = 2, column = 0, rowspan = 3, columnspan = 2, sticky = W+E+N+S)
        self.Frame3 = Frame(master, bg="green")
        self.Frame3.grid(row = 0, column = 2, rowspan = 6, columnspan = 3, sticky = W+E+N+S)

root = Tk()
app = Application(master=root)
app.mainloop()

更新:これで自分のパソコンにいるので、必要な結果と取得した結果の画像をそれぞれ次に示します。

WANT

GET

14
Jubbles

数時間コードをいじった後、ようやく目的のGUIを作成することができました。重要なのは、行と列をループし、それぞれ行構成と列構成を使用して重みを設定することでした。コードは以下の通りです:

from tkinter import *

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.grid()
        self.master.title("Grid Manager")

        for r in range(6):
            self.master.rowconfigure(r, weight=1)    
        for c in range(5):
            self.master.columnconfigure(c, weight=1)
            Button(master, text="Button {0}".format(c)).grid(row=6,column=c,sticky=E+W)

        Frame1 = Frame(master, bg="red")
        Frame1.grid(row = 0, column = 0, rowspan = 3, columnspan = 2, sticky = W+E+N+S) 
        Frame2 = Frame(master, bg="blue")
        Frame2.grid(row = 3, column = 0, rowspan = 3, columnspan = 2, sticky = W+E+N+S)
        Frame3 = Frame(master, bg="green")
        Frame3.grid(row = 0, column = 2, rowspan = 6, columnspan = 3, sticky = W+E+N+S)

root = Tk()
root.geometry("400x200+200+200")
app = Application(master=root)
app.mainloop()

enter image description here

15
Jubbles

フレーム1、2、3にはウィジェットが含まれておらず、高さも指定されていないため、自然なサイズは1ピクセルです。 frame2に何かを入れるか、frame2に高さを与えると、それが表示されます。

4
Bryan Oakley

Pytkgen(https://github.com/tmetsch/pytkgenまたは http://pypi.python.org/pypi/pytkgen/ )を試してみたい場合は、JSONファイルからTkinter GUIを生成して取得します重量、高さ、行/列の構成に注意してください。ここの例を参照してください: https://github.com/tmetsch/pytkgen/tree/master/examples

1
Andre