Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2014 09:46:57

Big_Man
Зарегистрирован: 2014-03-24
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

listbox метод grid ошибка

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

from tkinter import *
import os, sqlite3
root=Tk()
root.minsize(20,10)
root.maxsize(20,10)
root.title('123')
#root.iconbitmap('123.ico')
root.config(padx=10)
def Chtenie():
        sqlites_db=[]
        for filename in os.listdir(os.getcwd()):
                try:
                        res=sqlite3.connect(filename).cursor().execute('SELECT * from sqlite_master')
                        sqlites_db.append(filename)
                except sqlite3.DatabaseError:
                        pass
        return sqlites_db
def interfaceGrid():
        sbar=Scrollbar(root)
        list=Listbox(root, relief=SUNKEN, bd=2, height=10)
        sbar.config(command=list.yview)
        list.config(yscrollcommand=sbar.set)
        list.grid(row=1, rowspan=3, column=0, padx=0, pady=10)
        sbar.grid(row=1, rowspan=3, column=1, sticky=NS, pady=10)
        pos=0
        optionsBG=Chtenie()
        for label in optionsBG:
                list.insert(pos, label)
                pos+=1
        list.config(selectmode=SINGLE, setgrid=1)
        list.bind('<Double-1>', handleList)
        Label(root).grid(row=1, column=0)
        konnekt=Button(root, text='Connect',width=10)
        konnekt.grid(row=1, column=2, padx=10, pady=10)
        konnekt.bind('<Button-1>', handleList)
        Button(root, text='Delete Base', width=10, command=print('DELETE')).grid(row=2, column=2, padx=10, pady=10)
        Button(root, text='Import Base', width=10, command=print('Import')).grid(row=3, column=2, padx=10, pady=10)
        Button(root, text='New Base', width=10, command=print('NewBase')).grid(row=4, column=2, padx=10, pady=10)
        Entry(root).grid(row=4, column=0)
        root.listbox=list
            
def handleList(event):
        index=root.listbox.curselection()
        label=root.listbox.get(index)
        runCommand(root, label)
def runCommand(root, selection):
	print('You selected:', selection)
if __name__=='__main__':
	interfaceGrid()
	mainloop()

Прикреплённый файлы:
attachment kod.rar (1,6 KБ)

Офлайн

#2 Май 29, 2014 12:21:13

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

listbox метод grid ошибка

1. Тема должна быть в разделе GUI.
2. Никогда не используйте конструкцию:

from tkinter import *

3. Почитайте по PEP8, так как код слегка жуткий.

4. Ну и по Вашему вопросу:
Код немного упростил, чтобы можно было запустить.

import tkinter
root = tkinter.Tk()
root.title('123')
#root.iconbitmap('123.ico')
root.config(padx=10)
#
def interfaceGrid():
        fr_list = tkinter.Frame(root)
        fr_list.grid(row=1, rowspan=3, column=0, padx=0, pady=10)
        sbar=tkinter.Scrollbar(root)
        list=tkinter.Listbox(fr_list, relief="sunken", bd=2, height=10)
        sbar.config(command=list.yview)
        list.config(yscrollcommand=sbar.set)
        list.pack()
        sbar.grid(row=1, rowspan=3, column=1, sticky="ns", pady=10)
        optionsBG = [11, 12, 13, 14, 15]
        list.insert("end", *optionsBG)
        list.bind('<Double-1>', handleList)
        konnekt=tkinter.Button(root, text='Connect',width=10)
        konnekt.grid(row=1, column=2, padx=10, pady=10)
        konnekt.bind('<Button-1>', handleList)
        tkinter.Button(root, text='Delete Base', width=10).grid(row=2, column=2, padx=10, pady=10)
        tkinter.Button(root, text='Import Base', width=10).grid(row=3, column=2, padx=10, pady=10)
        tkinter.Button(root, text='New Base', width=10).grid(row=4, column=2, padx=10, pady=10)
        tkinter.Entry(root).grid(row=4, column=0)
        root.listbox=list
#
def handleList(event):
    index=root.listbox.curselection()
    label=root.listbox.get(index)
    runCommand(root, label)
def runCommand(root, selection):
    print('You selected:', selection)
if __name__=='__main__':
    interfaceGrid()
    mainloop()

P.S. Будут вопросы - пишите…

Офлайн

#3 Май 30, 2014 05:29:30

Big_Man
Зарегистрирован: 2014-03-24
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

listbox метод grid ошибка

Спасибо! Проблема решена. Все работает.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version