Найти - Пользователи
Полная версия: Listbox в Tkinter
Начало » GUI » Listbox в Tkinter
1 2 3 4 5 6
Yura_Lemeshko
Yura_Lemeshko

Да, это я начудил. Если логично то данные которые вносятся в листбоксы должны сохраняться хоть где-то, поэтому было обусловлено
……….
	global list_4
	def read_file_to_lbox():
		try:
			f = open('lbox_4.txt', 'r') # Открывает файл для чтения
		except:
…..
# Функция связанная с кнопкой сохранения
…..
try:
			f = open('lbox_4.txt', 'w') # Открывает файл для чтения
			# f = open(sa, 'w') # Открыть файл, режим добавления
…..

Так-как везде было
f = open('lbox_4.txt', 'r')
оно и сохраняло все значения в один файл и при новом открытии программы одна запись отображалась во всех листбоксах. После того как назначил каждому листбоксу свой ‘.txt’ все начало работать корректно.
P.S. Хоть и через всем известное место. (Я так понимаю).
4kpt_II
Прошу прощения, что раньше не смог. Жуткая неделя.

Держите. Сохранение рекомендую реализовывать с использованием модуля shelve. Если нужна будет помощь в этом, то помогу обязательно.

#coding: utf-8
#
import Tkinter
#
#
def save(type_, entry, top_level):
    """save new client or change existing"""
#
    if type_ == "new":
        clients.insert("end", entry.get())
        clients.activate("end")
        clients.select_clear(clients.curselection()[0])
        clients.selection_set("end")
        clients.see("end")
#
    else:
        position = clients.curselection()
        clients.delete(position)
        clients.insert(position, entry.get())
        clients.activate(position)
        clients.select_set(position)
#
    top_level.destroy()
#
#
def create_change(type_):
    """create top level window to create new client or change existing"""
#
    name = u"Новый клиент" if type_ == "change" else u"Изменить клиента"
    in_ = clients.get(clients.curselection()[0]) if type_ == "change" else u""
#
    top_level = Tkinter.Toplevel()
    Tkinter.Label(
        top_level, text=name
    ).grid(row=0, column=0, columnspan=2, padx=10, pady=10)
    client_e = Tkinter.Entry(top_level)
    client_e.grid(row=1, column=0, columnspan=2, padx=10, pady=10)
    client_e.insert(0, in_)
    client_e.focus_force()
    Tkinter.Button(
        top_level, text=u"Сохранить",
        command=lambda: save(type_, client_e, top_level)
    ).grid(row=2, column=0, padx=10, pady=10)
    Tkinter.Button(
        top_level, text=u"Отменить", command=lambda: top_level.destroy()
    ).grid(row=2, column=1, padx=10, pady=10)
#
root = Tkinter.Tk()
root.title(u"Клиенты-заказы")
#
client_f = Tkinter.LabelFrame(text=u"Клиенты")
client_f.pack(side="left", padx=20, pady=10)
#
# client listbox and scrollbar
lsb_f = Tkinter.Frame(client_f)
lsb_f.pack(side="top", padx=10)
clients = Tkinter.Listbox(lsb_f, width=20, height=20)
scr = Tkinter.Scrollbar(lsb_f)
scr["command"] = clients.yview
clients["yscrollcommand"] = scr.set
clients.pack(side="left", pady=5)
scr.pack(side="right", pady=5, fill="y")
#
# buttons "+", "Изменить" u"-"
but_f = Tkinter.Frame(client_f)
but_f.pack(side="bottom", pady=10)
Tkinter.Button(
    but_f, text="+", command=lambda: create_change("new")
).grid(row=0, column=0, padx=5)
Tkinter.Button(
    but_f, text=u"Изменить", command=lambda: create_change("change")
).grid(row=0, column=1, padx=5)
Tkinter.Button(but_f, text=u"-").grid(row=0, column=2, padx=5)
#
# insert old clients and activate first line
clients.insert("end", *["Клиент {0:0>2}".format(i) for i in xrange(100)])
clients.activate(0)
clients.selection_set(0)
clients.focus_force()
#
root.mainloop()
Yura_Lemeshko
4kpt_II
Прошу прощения, что раньше не смог. Жуткая неделя.Держите. Сохранение рекомендую реализовывать с использованием модуля shelve. Если нужна будет помощь в этом, то помогу обязательно.

Спасибо
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