简体   繁体   中英

scrollbar doesn't fill or appear (tkinter)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM