2

私は python3/tkinter で小さな GUI を書いています。私がやりたいことは、データのテーブル (スプレッドシートなど) を含むウィンドウを生成し、テーブルを水平方向と垂直方向の両方にスクロールできるようにすることです。今はデータを表示しようとしているだけなので、ラベルのグリッドを使用しています。データ表示は問題なく動作しますが、スクロール バーが正しく動作しません。これが私のコードの関連部分です。これが含まれるクラスは tk.Toplevel から継承します

frame = self.frame = tk.Frame(self)
self.frame.grid(row=1, columnspan=2, padx=2, pady=2, sticky=tk.N+tk.E+tk.S+tk.W)

self.text_area = tk.Canvas(self.frame, background="black", width=400, height=500, scrollregion=(0,0,1200,800))
self.hscroll = tk.Scrollbar(self.frame, orient=tk.HORIZONTAL, command=self.text_area.xview)
self.vscroll = tk.Scrollbar(self.frame, orient=tk.VERTICAL, command=self.text_area.yview)
self.text_area['xscrollcommand'] = self.hscroll.set
self.text_area['yscrollcommand'] = self.vscroll.set

self.text_area.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)
self.hscroll.grid(row=1, column=0, sticky=tk.E+tk.W)
self.vscroll.grid(row=0, column=1, sticky=tk.N+tk.S)

self._widgets = []

for row in range(rows):
    current_row = []
    for column in range(columns):
        label = tk.Label(self.text_area, text="", 
                         borderwidth=0, width=width)
        label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1)
        current_row.append(label)
    self._widgets.append(current_row)

テーブルには OK が表示され、スクロールバーは表示されますが機能しません。 ここに画像の説明を入力

何か案は?

4

2 に答える 2

3

いくつかの問題があります。gridまず、ラベルをキャンバスに配置してスクロールすることはできません。キャンバスをスクロールすると、 で追加されたウィジェットのみcreate_windowがスクロールします。ただし、 grid を使用してラベルをフレームに配置し、 を使用create_windowしてフレームをキャンバスに追加できます。このサイトには、そのテクニックの例がいくつかあります。

次に、キャンバス内のどのくらいのデータをスクロール可能にするかをキャンバスに伝える必要があります。scrollregionキャンバスの属性を設定して使用します。bboxキャンバス内のすべてのデータの境界ボックスを提供できるメソッドがあります。通常は次のように使用します。

canvas.configure(scrollregion=canvas.bbox("all"))
于 2013-07-31T02:18:16.557 に答える