Найти - Пользователи
Полная версия: listbox управление кнопками
Начало » Python для новичков » listbox управление кнопками
1
Big_Man
#Нужно создать окно с возможностью выбора базы данных. Базы данных должны находиться в одной директории, но их имена мне известны. Созданные БД SQLite не имеют расширения, нужно по какому-то признаку определить их принадлежность к SQLite и вывести имена. За ранее спасибо!
{Решено}


Использую Python 3.3 Tkinter. Есть интерфейс, задача состоит в возможности управления с клавиатуры т.е. можно было с клавиатуры выбрать нужную строку и 1) с помощью кнопки “Connect” 2) с помощью клавиши “Enter” 3) С помощью двойного клика мыши запустить handleList. В существующем виде кнопки реагируют только на выделенную предварительно мышью строку…

from tkinter import *
import os, sqlite3
root=Tk()
.
.
.
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)
       .
       .
       .
        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()
JOHN_16
Претендент на эталон “как не надо составлять сообщение”.:mad: Когда

Big_Man
Нужно создать окно с возможностью выбора базы данных
Какое еще окно? GUI (Tk, Qt, GTK,wxWidgets ??) WEB ? О чем вообще идет речь?

Big_Man
Созданные БД SQLite не имеют расширения, нужно по какому-то признаку определить их принадлежность к SQLite и вывести имена.
гениальное решение - переименовать файлы с нужным расширением

А вообще, что за задача такая, окно с выбором БД..и что дальше? В общем либо описывайте подробнее что и как надо, либо …


Big_Man
JOHN_16
Какое еще окно? GUI (Tk, Qt, GTK,wxWidgets ??) WEB ? О чем вообще идет речь?
Только начал изучать Python, программированием раньше не занимался… Для создания интерфейса планирую использовать GUI Tk, программа должна работать с базами данных используя модуль SQLite, по замыслу, при запуске программы должно появляться окно, в котором можно выбрать: БД с которой нужно работать, либо создать такую БД, либо импортировать такую БД из другой копии такой программы. После осуществления выборы БД это окно должно закрывается и запускается окно основной части программы (для работы с выбранной БД).

Задача заключается в отображении списка БД (не в способе отображения, а получении списка уже существующих БД в нужной директории).
wiygn
Если я правильно понял задачу, то нужно определить является ли файл sqlite базой?
Самый очевидный способ — смотреть сигнатуры.
Вот здесь есть полное описание значений и их смещений для sqlite баз. Если есть проблемы со зрением, то
1.2.1 Magic Header String

Every valid SQLite database file begins with the following 16 bytes (in hex): 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00. This byte sequence corresponds to the UTF-8 string “SQLite format 3” including the nul terminator character at the end.

Возможно существуют способы и получше, посмотрели бы как это реализовано в других программах.
JOHN_16
имхо вариант с сигнатурами не сложен и экономически более выгоден, чем например нечто такое:
import os, sqlite3
sqlites_db=[]
for filename in os.listdir(os.getcwdu()):
    try:
        res=sqlite3.connect(filename).cursor().execute('SELECT * from sqlite_master')
        sqlites_db.append(filename)
    except sqlite3.DatabaseError:
        pass
print sqlites_db
Плюс нужно делать проверку на то что файл не пуст. Сюрпризом оказалось что пустой файл подобный код обрабатывает без ошибок возвращая по запросу пустой список.
Big_Man
Не совсем понимаю
JOHN_16
имхо вариант с сигнатурами не сложен и экономически более выгоден
, но исправил опечатки в “нечто таком” и все заработало, пока мне этого достаточно. Спасибо!
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