0

同じ行にあるため、水平方向にブラウズしたいフレームを内部に保持するキャンバス(、メソッドがttk.Frameないため)があります。いくつかのチュートリアルを見つけて、それらがさまざまなウィジェットの組み合わせを扱っていたときに、それらに従って、問題に適用しようとしましたが、成功しませんでした。スクロールバーは表示されますが、何も実行または応答しません。xviewyview

class App:
    def __init__(self,db):
        self.db = db
        self.root = tkinter.Tk()                             
        self.masterframe = ttk.Frame(self.root)
        self.masterframe.grid()

        self.mastercanvas = tkinter.Canvas(self.masterframe)
        self.mastercanvas.grid()

        self.scrollbar = ttk.Scrollbar(self.masterframe,orient="horizontal",
            command = self.mastercanvas.xview)

        self.scrollbar.grid()
        self.mastercanvas.configure(xscrollcommand=self.scrollbar.set)

        for i,e in enumerate(self.db.elements):
            xf = XFrame(self,e)
            xf.grid(row=0,column=i,sticky="n")

編集:

class XFrame:
    def __init__(self,app,x):
        self.app = app
        self.x = x
        self.frame = ttk.Frame(self.app.mastercanvas)
        self.set_up() # this sets frame's padding and populates it with widgets   

ここで、ここで提案されている 2 行のコードを貼り付けた場所 (最初のinit定義の最後、または 2 番目のinit定義の最後) には、新しいことは何も起こりません。フレームが意図したとおりに表示されていることがわかります。そのうちの 3 つです。第4部の一部。そして機能しないスクロールバー。

*

self.update_idletasks() # using self.root in first, self.app.root in second variant
self.mastercanvas.configure(scrollregion=self.mastercanvas.bbox("all")) 
# in second variant reffered to as self.app.mastercanvas ...
4

1 に答える 1