我想要放在一起的用戶界面必須提供一長串輸入選擇。我已將輸入字段放入帶有滾動條的框架中,並使用滾動條進行滾動。但是當用戶退出視口時,滾動條不會自動跟隨它。Python3 tk.Scrollbar和焦點
我遇到的另一個問題是窗口大小不適合內容;如果我在populate()
之後呼叫self.frame.grid()
,窗口會爲內容做一些奇怪的東西和大小,但是如果窗口大小調整或者內容行數超過屏幕高度,則滾動條不再起作用。我想要窗口是min(maxSizeForRows, screenHeight)
,固定寬度但不是高度。
我很感激任何幫助或指針得到這個工作。
import tkinter as tk
import tkinter.ttk as ttk
class Test(tk.Canvas):
def __init__(self, root):
super().__init__(root, borderwidth=0)
self.root = root
self.vsb = tk.Scrollbar(root, orient="vertical", command=self.yview)
self.configure(yscrollcommand=self.vsb.set)
self.vsb.pack(side="right", fill="y")
self.frame = tk.Frame(self)
self.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame")
self.pack(side="left", fill="both", expand=True)
self.frame.bind("<Configure>", self.onFrameConfigure)
self.populate()
def onFrameConfigure(self, event):
self.configure(scrollregion=self.bbox("all"))
def addRow(self, label, ent1, ent2):
row = self.row
lab = tk.Label(self.frame, text=label)
lab.grid(row=row, column=0, sticky='W')
sv = tk.StringVar()
sv.set(ent1)
e1 = tk.Entry(self.frame, width=16, justify=tk.RIGHT, textvariable=sv)
e1.grid(row=row, column=1)
sv = tk.StringVar()
sv.set(ent2)
e2 = tk.Entry(self.frame, width=16, justify=tk.RIGHT, textvariable=sv)
e2.grid(row=row, column=2)
self.row += 1
def populate(self):
self.row = 0
for i in range(0, 10):
self.addRow("Greeting", "Hello", "World")
self.addRow("Parting", "Ciao", "Banana")
self.addRow("Food", "Pepperoni", "Pizza")
self.addRow("Drink", "Cold", "Beer")
self.addRow("Actor", "Liam", "Neeson")
self.addRow("Occupation", "Software", "Engineer")
self.addRow("Languages", "Python", "Perl")
self.addRow("Browsers", "Chrome", "Firefox")
self.addRow("Places", "Irvine", "London")
self.addRow("States", "Cali", "Texas")
if __name__ == "__main__":
root = tk.Tk()
app = Test(root=root)
app.pack(side="top", fill="both", expand=True)
app.mainloop()
我最終通過在每個級別明確使用網格AND包來獲得許多我想要的行爲,但是作爲回報,我也得到了滾動條無法工作的行爲,而且事情變得極其緩慢並帶有許多可見的更新。 – kfsone 2014-11-26 01:34:56
使用網格和包沒有幫助。如果您在同一個小部件上同時使用這兩個小部件,則只有您調用的最後一個小部件纔會起作用。 – 2014-11-26 22:40:06