web-dev-qa-db-ja.com

内部でジオメトリマネージャーパックを使用できません

だから私はtkinterライブラリを使用してrssリーダーを作成しており、私のメソッドの1つでテキストウィジェットを作成しています。スクロールバーを追加するまで表示されます。

これがスクロールバーの前の私のコードです:

   def create_text(self, root):
        self.textbox = Text(root, height = 10, width = 79, wrap = 'Word')
        self.textbox.grid(column = 0, row = 0)

ここに私のコードがあります:

def create_text(self, root):
        self.textbox = Text(root, height = 10, width = 79, wrap = 'Word')
        vertscroll = ttk.Scrollbar(root)
        vertscroll.config(command=self.textbox.yview)
        vertscroll.pack(side="right", fill="y", expand=False)
        self.textbox.config(yscrllcommand=vertscroll.set)
        self.textbox.pack(side="left", fill="both", expand=True)
        self.textbox.grid(column = 0, row = 0)

これは私にエラーを与えます

_tkinter.TclError:vertscroll.pack(side = "right"、fill = "y"、expand = False)の行でグリッドによって管理されているスレーブを既に持っている.56155888内でジオメトリマネージャーパックを使用できません

これを修正する方法はありますか?

11
user3623888

ドキュメント ごとに、同じマスターウィンドウでpackgridを混在させないでください。

警告:グリッドとパックを同じマスターウィンドウに混在させないでください。 Tkinterは、あなたの生涯の残りを、両方のマネージャーが満足するソリューションを交渉しようとして喜んで過ごします。待つ代わりに、アプリケーションを強制終了し、コードをもう一度見てください。よくある間違いは、一部のウィジェットに間違った親を使用することです。

したがって、テキストボックスでgridを呼び出す場合、スクロールバーでpackを呼び出さないでください。


import Tkinter as tk
import ttk

class App(object):
    def __init__(self, master, **kwargs):
        self.master = master
        self.create_text()

    def create_text(self):
        self.textbox = tk.Text(self.master, height = 10, width = 79, wrap = 'Word')
        vertscroll = ttk.Scrollbar(self.master)
        vertscroll.config(command=self.textbox.yview)
        self.textbox.config(yscrollcommand=vertscroll.set)
        self.textbox.grid(column=0, row=0)
        vertscroll.grid(column=1, row=0, sticky='NS')

root = tk.Tk()
app = App(root)
root.mainloop()
19
unutbu

コードの理由は簡単です。同じクラス内または同じフレームでパックとグリッドを使用することはできません。したがって、1つだけを使用してください。

0
ThePerson