Tkinter прокрутка списков - PullRequest
       0

Tkinter прокрутка списков

0 голосов
/ 10 января 2020

Я работаю над проектом с моим другом. Мы используем 16 списков. Мы создали программу для одновременной прокрутки всех них, но проблема в том, что нам потребовалось около 300 строк кода, и мы хотим привести их в порядок, но мы не знаем, как это сделать. Мы сделали небольшой прототип, но мы не можем понять, как остановить прокрутку списка больше, чем другие из-за зависания над ним. Может кто-нибудь сказать нам, как это сделать?

from tkinter import *

screen = Tk()
screen.title("EEPROM programmer")
screen.geometry("1050x620")
screen.maxsize(width = 1050, height = 620)
screen.minsize(width = 1050, height = 620)
listBoxes = {}
listNumber = 16
scrollbar = Scrollbar(screen)
scrollbar.place(x=25*17,y=25,height=100)

scrollPosition = 0

print(len(listBoxes))

def scrolllist(event):
    global scrollPosition
    scrollPosition += (((-event.delta)/120)*7)/75
    if scrollPosition >= 0.75:
        scrollPosition = 0.75
    elif scrollPosition <= 0:
        scrollPosition = 0
    print(scrollPosition)
    for num in range(listNumber):
        listBoxes[num].yview("moveto", scrollPosition)
    print()

for x in range(listNumber):
    listBoxes[x] = Listbox(screen, font=("consolas", 12, "bold"), height=25, width=3, yscrollcommand=scrollbar.set)
    listBoxes[x].place(x=25*x, y=25)
    listBoxes[x].bind("<MouseWheel>", scrolllist)

for y in range(100):
    for x in range(listNumber):
        listBoxes[x].insert(0, y)

def scrollLists(x, y):
    print(x)
    print(y)
    global scrollPosition
    scrollPosition = float(y)
    for num in range(listNumber):
        listBoxes[num].yview(x, y)

scrollbar.config(command = scrollLists)

screen.mainloop()

Ответы [ 2 ]

2 голосов
/ 10 января 2020

2 вещи. Сначала свяжите все свои списки на экране вместе, а не по отдельности.

screen.bind_all("<MouseWheel>", scrolllist)

Во-вторых, добавьте смещение для движения при наведении, вот так.

listBoxes[num].yview("scroll", event.delta, "units")

Я также сжал ваши scrollLists функция, поскольку она принимала неверное количество аргументов.

Полный код.

from tkinter import *

screen = Tk()
screen.title("EEPROM programmer")
screen.geometry("1050x620")
screen.maxsize(width = 1050, height = 620)
screen.minsize(width = 1050, height = 620)
listBoxes = {}
listNumber = 16
scrollbar = Scrollbar(screen)
scrollbar.place(x=25*17,y=25,height=100)

scrollPosition = 0

print(len(listBoxes))

def scrolllist(event):
    global scrollPosition
    scrollPosition += (((-event.delta)/120)*7)/75
    if scrollPosition >= 0.75:
        scrollPosition = 0.75
    elif scrollPosition <= 0:
        scrollPosition = 0
    print(scrollPosition)
    for num in range(listNumber):
        listBoxes[num].yview("scroll", event.delta, "units")
        listBoxes[num].yview("moveto", scrollPosition)
    print()

for x in range(listNumber):
    listBoxes[x] = Listbox(screen, font=("consolas", 12, "bold"), height=25, width=3, yscrollcommand=scrollbar.set)
    listBoxes[x].place(x=25*x, y=25)
screen.bind_all("<MouseWheel>", scrolllist)

for y in range(100):
    for x in range(listNumber):
        listBoxes[x].insert(0, y)

def scrollLists(*args):
    for num in range(listNumber):
        listBoxes[num].yview(*args)

scrollbar.config(command = scrollLists)

screen.mainloop()
0 голосов
/ 10 января 2020

Вы можете попробовать сделать что-то вроде этого. Это автоматически отрегулирует, как долго содержимое будет в списке.

scroll = Scrollbar(screen)
scroll.pack(side=RIGHT, fill=Y)
listbox = Listbox(screen, yscrollcommand=scroll.set)
listbox.pack()
scroll.config(command=info.yview)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...