Представьте себе, что есть два окна Tkinter.Toplevel (), называемые Window_1 и Window_2, которые можно открыть, нажав одну и ту же кнопку (например, Button_0).
Кнопка_0 нажата, и Window_1 всплывает. В Window_1 я могу прокручивать вверх и вниз с помощью коврика для мыши (MAC OS). После этого я оставил Window_1 открытым.
Кнопка_0 снова нажата, и Window_2 всплывает, а Window_1 остается открытым. В Window_2 я снова могу прокручивать вверх и вниз.
Теперь я возвращаюсь к Window_1 и пытаюсь прокрутить с помощью коврика для мыши, содержимое в Window_1 НЕ ПЕРЕМЕЩАТЬ, но содержимое в Window_2 ПЕРЕМЕСТИТЬ.
Затем я закрываю Window_2 и пытаюсь прокрутить Window_1, на этот раз я получаю сообщения об ошибках с запросом холста в Window_2.
Я сделал функцию связывания,
def on_vertical(canvas,event):
canvas.yview_scroll(-3 * event.delta, 'units')
на холст внутри каждого окна. Насколько я знаю об ошибке, похоже, что эту функцию нельзя было использовать дважды одновременно (оба окна открыты).
Мне бы хотелось, чтобы когда обе Windows оставались открытыми. Находясь в каждом окне, я могу прокручивать вверх-вниз, пока другое не перемещается. Можно ли это закодировать?
Это пример кода (обратите внимание, что имя окна не является исправленной меткой.)
from tkinter import *
######################## FUNCTIONS (DEF) ########################
def on_vertical(canvas,event):
canvas.yview_scroll(-3 * event.delta, 'units')
######################## FUNCTIONS (CLASS) ########################
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
#INITIAL WINDOW
def init_window(self):
self.master.title("Main Window")
self.pack(fill=BOTH, expand=1)
Button(self, text="Button_0",command = self.load_and_print).place(x = 7, y = 95)
# creating a button instance
Button(self, text="EXIT PROGRAM", command=self.client_exit).place(x=500, y=250)
#OPEN A NEW WINDOW CONTAINING STOCK LISTS
def load_and_print(self):
new_window = Toplevel(self)
new_window.title("Window")
canvas = Canvas(new_window, width = 800, height = 500, scrollregion = (0, 0, 0, 2500))
frame = Frame(canvas)
vbar = Scrollbar(new_window, orient = VERTICAL, command = canvas.yview)
vbar.pack(side = RIGHT,fill = Y)
canvas.create_window(0,0, window = frame, anchor = NW)
canvas.config(yscrollcommand = vbar.set)
canvas.pack(side = TOP,expand = True,fill = BOTH)
canvas.bind_all('<MouseWheel>', lambda event, canvas=canvas: on_vertical(canvas,event))
#MAKE PROGRAM EXIT
def client_exit(self):
exit()
######################## MAIN PROGRAMME ########################
#call window
root = Tk()
#size of the window
root.geometry("700x300")
app = Window(root)
root.mainloop()
root.update()