LINUX.ORG.RU

Tkinter: проблема со Scrollbar

 


0

1

Пишу программу, в которой есть много полей типа Entry, около них стоят чекбоксы. Не могу заставить работать скроллбар - он просто не смещает экран вниз. Кроме того, на выходе получается вот такая странная лесенка. Как исправить?

#!/usr/bin/python3
from tkinter import *

def show_list(long_list):
	top=Toplevel()
	listbox=Listbox(top)
	listbox.pack()
	scrollbar=Scrollbar(listbox,jump=0)
	scrollbar.pack(side=RIGHT,fill=Y)
	entries=[]
	cb=[]
	for i, text in enumerate(long_list):
		entries.append(Entry(listbox,text=text,width=80))
		cb.append(Checkbutton(listbox))
		entries[i].insert(1,text)
		entries[i].pack()
		cb[i].pack(side=RIGHT)
	listbox.config(yscrollcommand=scrollbar.set)
	scrollbar.config(command=listbox.yview)

root=Tk()
long_list=[]
i=0
for i in range(100):
	long_list.append(i+1)
show_list(long_list)
root.mainloop()

Deleted

тем про python & tkinter что-то стало черезчур много. Всем вопрошающим про tkinter, бесплатный дельный совет - изучить сначала tcl/tk. Тикль просто до безумия, Tk - всего-лишь его тулкит, tkinter - недоделанный мост в tcl/tk через python.

Tk великолепно продокументирован man`ами, для натурных экспериментов имеется tkcon; По факту недоимлеменченные API tk исполняются через eval - вы всёравно на python`е пишите кодогенерацию tcl, дык начните с основ.

MKuznetsov ★★★★★ ()

И добавляйте тег «Tk», чтобы голову людям не морочить.
p.s. Уже второй раз подрываюсь отвечать про Gtk, и потом тока понимаю, что вопрос про другое.

Novator ★★★★ ()

помимо «учите tcl/tk» :

- в Listbox нельзя добавлять Entry - он сам-по себе виджет(не контейнер) для отображения списков

- вместо Listbox надо использовать Canvas, внутрь его класть фрейм и вручную (короткими процедурами) управлять размером и скроллом - но это кропотливо и надо понимать работу Tk и знать Tcl.

- в пакетах BWidget, IWidgets есть скроллируемые фреймы, можете заюзать их

- что-то не то с дизайном интерфейса, если хочется делать скроллируемые формы

- для редактирования «таблиц» нужно используются treeview, tablelist, tktable, tktreectrl - на вкус и цвет, что понравится то и берите.

MKuznetsov ★★★★★ ()
Последнее исправление: MKuznetsov (всего исправлений: 1)

Ну, для начала, как правильно заметили выше - если форму надо прокручивать - что-то не так с дизайном интерфейса. Второе - зачем использовать Python, когда есть Tcl? Хотите объектов - используйте XOTcl (он божественен). На Tk правда проще работать в связке с Tcl. Причин использовать вместе с Tk Python - нет никаких (разве что принципиальное нежелание изучать Tcl, если так 0 глупо).

Далее - читайте маны к Tk, пользуйтесь сайтом TkDocs...Да и просто такие вопросы на самом деле гуглятся легко.

silver-bullet-bfg ★★ ()
Ответ на: комментарий от silver-bullet-bfg

Я уже, наверное, несколько тысяч раз гуглил по Tk. Большинство ответов на stackoverflow, руководства обычно представляют собой описание ключей и типичные примеры. А нетипичные случаи разруливать сложно. Tk, на самом деле, гемор. Жалею, что его выбрал.

Причин использовать вместе с Tk Python - нет никаких (разве что принципиальное нежелание изучать Tcl, если так 0 глупо)

А ничего, что в питоновском скрипте уже 5500 строк, а хлеб я зарабатываю не программированием? Прикажете Tcl выучить, и все на нем переписать?

Deleted ()

Лутц М. Программирование на Python, тома 1 и 2, 4е издание 2011 год.

изучить от корки до корки! если не осилишь, то будем тебя всем лором убивать этой книжкой за твой эталонный быдлокод!

der_looser ★★ ()
Ответ на: комментарий от Deleted

Я уже, наверное, несколько тысяч раз гуглил по Tk. Большинство ответов на stackoverflow, руководства обычно представляют собой описание ключей и типичные примеры.

Когда писал на Тк, так же было. Как оказалось просто не правильно формировал запросы.

А нетипичные случаи разруливать сложно. Tk, на самом деле, гемор. Жалею, что его выбрал.

Зря. Это один из немногих стабильных и по правде кроссплатформенных GUI-фреймворках.

А ничего, что в питоновском скрипте уже 5500 строк, а хлеб я зарабатываю не программированием? Прикажете Tcl выучить, и все на нем переписать?

А вот это уже как раз аргумент использовать Python. Жаль, что изначально ошиблись с выбором языка

silver-bullet-bfg ★★ ()
Ответ на: комментарий от der_looser

Лутц - это, конечно, увлекательное чтиво, он авторитет и все такое, но... Вы серьезно считаете, что я должен прочитать 2000 стр только потому, что у меня возник мелкий затык на гуях (подчеркиваю: на *гуях*)? Ну и пусть архитектурно прога, может быть, и не очень, где-то встречается unpythonic, но, во всяком случае, у меня нет повторов одних и тех же циклов по шестьсот шестьдесят шесть раз и функций с названиями a1, a2, a3. Разве что делать «from tkinter import *» не совсем корректно, но это поправимо. А если вы считаете, что это - эталонный быдлокод, покажите свой, раз есть повод, чем гордиться. Заодно и покажете, как *надо*, с вашей точки зрения, писать программы.

Deleted ()
long_list=[]
i=0
for i in range(100):
	long_list.append(i+1)
long_list = list(xrange(1,100))
anonymous ()
Ответ на: комментарий от Deleted

вот лутца почитаешь и увидишь как надо. там есть обзор основных виджетов тк и примеры как правильно генерить интерфейс из однообразных виджетов. все 2000 стр. читать не обязательно. тебе хватит пробежаться по разделам первого тома, где он графический интерфейс расписывает.

der_looser ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.