1. ホーム
  2. python

[解決済み] ジオメトリマネージャパックを内部で使用できない

2022-02-27 09:21:53

質問

tkinterライブラリを使ってRSSリーダーを作っているのですが、あるメソッドでテキストウィジェットを作りました。スクロールバーを追加するまではうまく表示されています。

以下は、スクロールバーの前の私のコードです。

   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: cannot use geometry manager pack inside .56155888 which already has slaves managed by grid on the line. vertscroll.pack(side="right", fill="y", expand=False)を実行します。

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

解決方法は?

1回あたり ドキュメント を混ぜないでください。 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()