0
キャンバスに配置されたいくつかのウィジェットを使用して、いくつかのタスクを通じて進捗状況を表示しています。これを行うために、フレームのキャンバスにグリッドを配置します。ほとんどすべてが動作しますが、ウィンドウの下部(フレーム)にデフォルト設定するにはスクロールバーが必要です。 vsb.setを使用してスクロールバーを新しい位置に強制しようとしましたが、効果はありません。イベントハンドラを使用してスクロールバーを移動すると、私はその動きを制御できなくなります。私は初心者ですし、いくつかの入力を感謝します。以下のコードを参照してください。キャンバスに複数のウィジェットを自動スクロールする
from tkinter import *
import tkinter as tk
class example(Frame):
def __init__(self, root):
Frame.__init__(self, root)
self.initUI()
def initUI(self):
self.canvas = Canvas(root, borderwidth=0, background="#ffffff", height=300, width=700)
self.frame = Frame(self.canvas, background="#ffffff")
self.vsb = Scrollbar(root, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.canvas.pack(side="left", fill="both", expand=True)
self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame")
self.frame.bind("<Configure>", self.onFrameConfigure)
root.title("Issue with Scrolling through Widgets")
self.populate()
def onFrameConfigure(self, event):
###Reset the scroll region to encompass the inner frame
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
self.canvas.bind_all("<MouseWheel>", self._on_mousewheel)
def _on_mousewheel(self, event):
self.canvas.yview_scroll(-1*int(event.delta/120),"units")
def populate(self):
###Put in some fake data###
for row in range(20):
Txt = Text(self.frame, bg="white", borderwidth=1, height=1, width=40)
Txt.grid(row = row, column = 0, rowspan = 1, columnspan = 1, sticky = W+E+N+S)
line = "this is the first column for row %s" %row
Txt.insert(END, str(line))
Txt = Text(self.frame, bg="white", borderwidth=1, height=1, width=40)
Txt.grid(row = row, column = 1, rowspan = 1, columnspan = 1, sticky = W+E+N+S)
line = "this is the second column for row %s" %row
Txt.insert(END, str(line))
if __name__ == "__main__":
root=Tk()
example(root).pack(side="top", fill="both", expand=True)
root.mainloop()
「ウィンドウの下部にデフォルトで」、内容を下にスクロールしたい、または実際のスクロールバーを別の物理的な位置にしたいということですか? –
私は、ウィンドウに最後に送信されたものを表示することをデフォルトにしたいと思います。 –