Я работаю над новой программой на Python 3 с tkinter. Я пытаюсь добавить панель прокрутки ко всему окну, но она не работает. Прямо сейчас я просто пытаюсь сделать окно размером 1000 пикселей (будет установлено позже в программе) и использовать вертикальную полосу прокрутки для доступа к частям, которые не видны на экране. Я прочитал несколько других потоков, пытаясь понять это и попытался. Может ли кто-нибудь сказать, как заставить его работать и что я сделал не так. Не отображается ошибка, но также не отображается полоса прокрутки. Вот код:Python Tkinter Scrollbar не работает
from tkinter import *
class MusicPlayer:
def __init__(self):
self.tk = Tk()
self.tk.title("Bass Blaster")
self.screen_width, self.screen_height = self.tk.winfo_screenwidth(), self.tk.winfo_screenheight()
self.frame = Frame(self.tk, width=self.screen_width, height=self.screen_height)
self.frame.grid(row=0, column=0)
self.canvas = Canvas(self.frame, bg="#585858", width=self.screen_width, height=self.screen_height, scrollregion=(0, 0, self.screen_width, 1000))
vbar = Scrollbar(self.frame, orient=VERTICAL)
vbar.pack(side=RIGHT, fill=Y)
vbar.config(command=self.canvas.yview)
self.canvas.config(width=self.screen_width, height=self.screen_height)
self.canvas.config(yscrollcommand=vbar.set)
self.canvas.pack(side=LEFT, expand=True, fill=BOTH)
self.tk.update()
bass_blaster = MusicPlayer()
bass_blaster.tk.mainloop()
Я не знаю, как Tkinter работает под капотом, но ваша переменная 'vbar' является локалью к методу' __init__', а затем, когда вы ее оставляете, 'vbar' уничтожается, если у вас нет ссылки на него. Tkinter может не сохранять вашу ссылку в качестве дочернего элемента, и ваша полоса прокрутки уничтожается, когда вы покидаете метод '__init__'. Постарайтесь сделать его членом класса. (вы также должны сделать свой класс 'MusicPlayer' наследованием от' Tk') –
@ romain-aga Я изменил vbar на self.vbar, думая, что это так, но это не имело значения. Попробует наследовать Tk – Garrett
Похоже, высота холста больше 1000. Попробуйте установить высоту холста менее 1000. – acw1668