[英]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.