python为text添加滚动条_在Tkinter中向一组小部件添加滚动条
概述
您只能將滾動條與一些小部件關聯起來,根小部件和Frame不是那組小部件的一部分。
最常見的解決方案是創建一個畫布小部件,并將滾動條與該小部件關聯起來。然后,將包含標簽小部件的框架嵌入到畫布中。確定框架的寬度/高度,并將其輸入畫布。scrollregion選項,以便滾動區域與框架的大小完全匹配。
在畫布上直接繪制文本項并不困難,因此如果畫布框架內嵌解決方案看起來過于復雜,您可能需要重新考慮這種方法。由于要創建網格,每個文本項的坐標將非常容易計算,特別是如果每一行的高度相同(如果使用單一字體,可能就是這樣)。
要在畫布上直接繪圖,只需計算出所使用字體的線條高度(這方面有一些命令)。然后,每個y坐標是row*(lineheight+spacing)..x坐標將是基于每列中最寬項的固定數。如果為列中的所有項都賦予標記,則可以使用單個命令調整列中所有項的x坐標和寬度。
面向對象的解決方案
下面是一個使用面向對象方法的畫布框架內嵌解決方案的示例:import?tkinter?as?tkclass?Example(tk.Frame):
def?__init__(self,?root):
tk.Frame.__init__(self,?root)
self.canvas?=?tk.Canvas(root,?borderwidth=0,?background="#ffffff")
self.frame?=?tk.Frame(self.canvas,?background="#ffffff")
self.vsb?=?tk.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("",?self.onFrameConfigure)
self.populate()
def?populate(self):
'''Put?in?some?fake?data'''
for?row?in?range(100):
tk.Label(self.frame,?text="%s"?%?row,?width=3,?borderwidth="1",
relief="solid").grid(row=row,?column=0)
t="this?is?the?second?column?for?row?%s"?%row
tk.Label(self.frame,?text=t).grid(row=row,?column=1)
def?onFrameConfigure(self,?event):
'''Reset?the?scroll?region?to?encompass?the?inner?frame'''
self.canvas.configure(scrollregion=self.canvas.bbox("all"))if?__name__?==?"__main__":
root=tk.Tk()
Example(root).pack(side="top",?fill="both",?expand=True)
root.mainloop()
程序解決方案
以下是不使用對象的解決方案:import?tkinter?as?tkdef?populate(frame):
'''Put?in?some?fake?data'''
for?row?in?range(100):
tk.Label(frame,?text="%s"?%?row,?width=3,?borderwidth="1",
relief="solid").grid(row=row,?column=0)
t="this?is?the?second?column?for?row?%s"?%row
tk.Label(frame,?text=t).grid(row=row,?column=1)def?onFrameConfigure(canvas):
'''Reset?the?scroll?region?to?encompass?the?inner?frame'''
canvas.configure(scrollregion=canvas.bbox("all"))root?=?tk.Tk()canvas?=?tk.Canvas(root,?borderwidth=0,?background="#ffffff")frame?=
tk.Frame(canvas,?background="#ffffff")vsb?=?tk.Scrollbar(root,?orient="vertical",?command=canvas.yview)canvas.configure
(yscrollcommand=vsb.set)vsb.pack(side="right",?fill="y")canvas.pack(side="left",?fill="both",?expand=True)canvas.create_window((4,4),
window=frame,?anchor="nw")frame.bind("",?lambda?event,?canvas=canvas:?onFrameConfigure(canvas))populate(frame)root.mainloop()
注:若要在python2.x中執行此操作,請使用Tkinter而不是tkinter在導入語句中
總結
以上是生活随笔為你收集整理的python为text添加滚动条_在Tkinter中向一组小部件添加滚动条的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中的常量可以修改吗_pyth
- 下一篇: python自动填写小程序表单_新年好!