I'm having trouble with my scrollbar. I tried a few solutions of placing it but each time I had a little trouble. Sometimes I can't see the scrollbar, other times it doesn't fill the y-axis
.
First, I tried without canvas, just with frame ( allTelemtry
) and used grid()
, but couldn't achieve a working scrollbar. I then tried with canvas so I can use pack()
, but it still didn't work properly.
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()
In line 24, I added allTelemetryCanvas.create_window
. In lines 27-32, I added dotTelemetry.bind
. I replaced allTelemetryCanvas.configure
in line 66 before mainloop()
.
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()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.