[英]scrollbar doesn't fill or appear (tkinter)
我的滾動條有問題。 我嘗試了一些放置它的解決方案,但每次都遇到了一些麻煩。 有時我看不到滾動條,有時它沒有填滿y-axis
。
首先,我嘗試不使用畫布,僅使用框架( allTelemtry
)並使用grid()
,但無法實現工作滾動條。 然后我嘗試使用 canvas 以便可以使用pack()
,但它仍然無法正常工作。
from tkinter import *
from tkinter import ttk
root = Tk()
root.state('zoomed')
# creating notebook
telemetry = ttk.Notebook(root, width=1083, height=200)
telemetry.place(x=440, y=560)
allTelemetry = Frame(telemetry)
allTelemetry.pack(fill="both", expand = 1)
# creating canvas for scrollbar
allTelemetryCanvas = Canvas(allTelemetry)
allTelemetryCanvas.pack(fill="both", expand = 1)
dotTelemetry = Frame(telemetry)
dotTelemetry.pack(fill="both", expand = 1)
telemetry.add(allTelemetry, text= u"Hepsini Goster")
telemetry.add(dotTelemetry, text= u"Anlik Telemetri")
#------------------------------------------------------------
teleTitle = [" ", "Takmno","Paketno","Zaman",
"1Basn","2Basn",
"Nem",
"1kseklik","2Ykseklik",
"rtifaFark","niHz","Scaklk","PilGerilimi",
"La1","Lo1","Al1",
"La2","Lo2","Al2",
"Drm",
"x","y","z",
"DnSays","Video"]
empty = Label(allTelemetryCanvas, text="",width=3)
empty.grid(row=0,column=0,padx=1, pady=1)
for j in range(1,25):
teleTitle[j] = teleTitle[j].encode('UTF-8')
entry = Label(allTelemetryCanvas,text=teleTitle[j].decode(),anchor='w', width=5, bd=2)
entry.grid(row=0, column=j,padx=1, pady=1)
packet=1
for i in range(1,10):
packetNum = Label(allTelemetryCanvas, text = packet, anchor="w",width=3)
packetNum.grid(row=i, column=0,pady=0.5)
packet = packet+1
for j in range(1,25):
takenData = Entry(allTelemetryCanvas,width=5)
takenData.grid(row=i, column=j,pady=0.5)
# !!!!!!!!!!!!!!!!!
scrollbar = ttk.Scrollbar(allTelemetry, orient='vertical', command=allTelemetryCanvas.yview)
scrollbar.pack(side=RIGHT, fill="y")
allTelemetryCanvas['yscrollcommand'] = scrollbar.set
root.mainloop()
在第 24 行,我添加了allTelemetryCanvas.create_window
。 在第 27-32 行,我添加了dotTelemetry.bind
。 我在mainloop()
之前的第 66 行替換了allTelemetryCanvas.configure
。
from tkinter import *
from tkinter import ttk
root = Tk()
root.state('zoomed')
# creating notebook
telemetry = ttk.Notebook(root, width=1083, height=200)
telemetry.place(x=440, y=560)
allTelemetry = Frame(telemetry)
allTelemetry.pack(fill="both", expand = 1)
# creating canvas for scrollbar
allTelemetryCanvas = Canvas(allTelemetry)
allTelemetryCanvas.pack(side="left", fill="both", expand=True)
dotTelemetry = Frame(telemetry)
dotTelemetry.pack(fill="both", expand = 1)
telemetry.add(allTelemetry, text= u"Hepsini Goster")
telemetry.add(dotTelemetry, text= u"Anlik Telemetri")
allTelemetryCanvas.create_window((0, 0), window=dotTelemetry, anchor="nw")
dotTelemetry.bind(
"<Configure>",
lambda e: allTelemetryCanvas.configure(
scrollregion=allTelemetryCanvas.bbox("all")
)
)
#------------------------------------------------------------
teleTitle = [" ", "Takmno","Paketno","Zaman",
"1Basn","2Basn",
"Nem",
"1kseklik","2Ykseklik",
"rtifaFark","niHz","Scaklk","PilGerilimi",
"La1","Lo1","Al1",
"La2","Lo2","Al2",
"Drm",
"x","y","z",
"DnSays","Video"]
empty = Label(allTelemetryCanvas, text="",width=3)
empty.grid(row=0,column=0,padx=1, pady=1)
for j in range(1,25):
teleTitle[j] = teleTitle[j].encode('UTF-8')
entry = Label(allTelemetryCanvas,text=teleTitle[j].decode(),anchor='w', width=5, bd=2)
entry.grid(row=0, column=j,padx=1, pady=1)
packet=1
for i in range(1,10):
packetNum = Label(allTelemetryCanvas, text = packet, anchor="w",width=3)
packetNum.grid(row=i, column=0,pady=0.5)
packet = packet+1
for j in range(1,25):
takenData = Entry(allTelemetryCanvas,width=5)
takenData.grid(row=i, column=j,pady=0.5)
# !!!!!!!!!!!!!!!!!
scrollbar = ttk.Scrollbar(allTelemetry, orient='vertical', command=allTelemetryCanvas.yview)
scrollbar.pack(side=RIGHT, fill="y")
allTelemetryCanvas.configure(yscrollcommand=scrollbar.set)
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.