Найти - Пользователи
Полная версия: MultiListbox in Tkinter need help
Начало » GUI » MultiListbox in Tkinter need help
1
124bit
собственно накопал в нэте - вот http://code.activestate.com/recipes/52266/

from Tkinter import *

class MultiListbox(Frame):
def __init__(self, master, lists):
Frame.__init__(self, master)
self.lists =
for l,w in lists:
frame = Frame(self); frame.pack(side=LEFT, expand=YES, fill=BOTH)
Label(frame, text=l, borderwidth=1, relief=RAISED).pack(fill=X)
lb = Listbox(frame, width=w, borderwidth=0, selectborderwidth=0,
relief=FLAT, exportselection=FALSE)
lb.pack(expand=YES, fill=BOTH)
self.lists.append(lb)
lb.bind('<B1-Motion>', lambda e, s=self: s._select(e.y))
lb.bind('<Button-1>', lambda e, s=self: s._select(e.y))
lb.bind('<Leave>', lambda e: ‘break’)
lb.bind('<B2-Motion>', lambda e, s=self: s._b2motion(e.x, e.y))
lb.bind('<Button-2>', lambda e, s=self: s._button2(e.x, e.y))
frame = Frame(self); frame.pack(side=LEFT, fill=Y)
Label(frame, borderwidth=1, relief=RAISED).pack(fill=X)
sb = Scrollbar(frame, orient=VERTICAL, command=self._scroll)
sb.pack(expand=YES, fill=Y)
self.lists=sb.set

def _select(self, y):
row = self.lists.nearest(y)
self.selection_clear(0, END)
self.selection_set(row)
return ‘break’

def _button2(self, x, y):
for l in self.lists: l.scan_mark(x, y)
return ‘break’

def _b2motion(self, x, y):
for l in self.lists: l.scan_dragto(x, y)
return ‘break’

def _scroll(self, *args):
for l in self.lists:
apply(l.yview, args)

def curselection(self):
return self.lists.curselection()

def delete(self, first, last=None):
for l in self.lists:
l.delete(first, last)

def get(self, first, last=None):
result =
for l in self.lists:
result.append(l.get(first,last))
if last: return apply(map, + result)
return result

def index(self, index):
self.lists.index(index)

def insert(self, index, *elements):
for e in elements:
i = 0
for l in self.lists:
l.insert(index, e)
i = i + 1

def size(self):
return self.lists.size()

def see(self, index):
for l in self.lists:
l.see(index)

def selection_anchor(self, index):
for l in self.lists:
l.selection_anchor(index)

def selection_clear(self, first, last=None):
for l in self.lists:
l.selection_clear(first, last)

def selection_includes(self, index):
return self.lists.selection_includes(index)

def selection_set(self, first, last=None):
for l in self.lists:
l.selection_set(first, last)

if __name__ == ‘__main__’:
tk = Tk()
Label(tk, text='MultiListbox').pack()
mlb = MultiListbox(tk, (('Subject', 40), ('Sender', 20), ('Date', 10)))
for i in range(1000):
mlb.insert(END, ('Important Message: %d' % i, ‘John Doe’, ‘10/10/%04d’ % (1900+i)))
mlb.pack(expand=YES,fill=BOTH)
tk.mainloop()





я в этом примере ничего не понимаю(имею хроническое непонимание кода GUI), понял только, как добавить свой столбик и как записывать..

собственно вопрос заключается в том, как менять данные в этой штуке.. на лету

ну к примеру, у меня кроме этого класса снизу еще один класс который может управлять этой мультилистбоксой после ее запуска и пару функций которые работают постоянно и передают в мультибоксу значения:
class list_control:
def changeline(self,line_index, value_list):

def delete_line(self,line_index):

def line_add(self,line_index, value_list):

def aaa():
list_control.delete_line(2)

покажите как сделать changeline,а я все по аналогие пойму.. ато я вообще не могу понять, как после tk.mainloop() чего то делать.. может надо както потоками пользоваться,?
.Serj.
Раз у тебя такое хроническое непонимание, может, стоило начать с примеров попроще?
124bit
пасибо серж, очень помог блин..
Ferroman
1. Оформите код в посте нормально, так - не читабельно.
2. Вы предлагаете что бы вам написали статью по написанию GUI на Tk. Тут или дать сразу готовое,что быстрее, но не правильно, или очень много всего объяснять.
Так что .Serj. абсолютно прав.
124bit
извините, и вправду чето не подумал насколько обьемно спрашиваю.. читал много(относительно)..но видно чегото я инзначально не так воспринимаю.. все мои недопонимания разрешит один пример..


from Tkinter import *
window = Tk()
tv=StringVar()
Entry(window,textvariable=tv,takefocus=True,).grid(row=1, column=0)
button=Button(window,text='Ok')
button.grid(row=3, column=0)
window.mainloop()

как так сделать, чтоб по кнопке ОК окно закрывалось и значение Entry записывалось в переменную, а программа продолжалась и могла работать с этой переменной.. заранее спасибо)
Ferroman
Закрытие окна не делал специально. Пример просто выводит значение в текстововм поле в консоль
from Tkinter import *

def buttonPress(entry_string):
'''
Функция вызываемая при клике на кнопку
'''
print 'msg', entry_string # вывод в консоль.

window = Tk()
tv = StringVar()

entry1 = Entry(window,textvariable=tv,takefocus=True) # делаем отельный экзмпляр
entry1.grid(row=1, column=0)

# в нашем случае нужно использовать lambda
button = Button(window,text='Ok', command=lambda name="Guido": buttonPress(entry1.get())) # привязывам клик к функции и передаём значение в entry (получаем значение с помощью get).

button.grid(row=3, column=0)

window.mainloop()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB