Форум сайта python.su
0
#Нужно создать окно с возможностью выбора базы данных. Базы данных должны находиться в одной директории, но их имена мне известны. Созданные БД 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()
Отредактировано Big_Man (Май 5, 2014 20:36:56)
Офлайн
221
Претендент на эталон “как не надо составлять сообщение”.:mad: Когда
Big_ManКакое еще окно? GUI (Tk, Qt, GTK,wxWidgets ??) WEB ? О чем вообще идет речь?
Нужно создать окно с возможностью выбора базы данных
Big_Manгениальное решение - переименовать файлы с нужным расширением
Созданные БД SQLite не имеют расширения, нужно по какому-то признаку определить их принадлежность к SQLite и вывести имена.
Офлайн
0
JOHN_16Только начал изучать Python, программированием раньше не занимался… Для создания интерфейса планирую использовать GUI Tk, программа должна работать с базами данных используя модуль SQLite, по замыслу, при запуске программы должно появляться окно, в котором можно выбрать: БД с которой нужно работать, либо создать такую БД, либо импортировать такую БД из другой копии такой программы. После осуществления выборы БД это окно должно закрывается и запускается окно основной части программы (для работы с выбранной БД).
Какое еще окно? GUI (Tk, Qt, GTK,wxWidgets ??) WEB ? О чем вообще идет речь?
Офлайн
2
Если я правильно понял задачу, то нужно определить является ли файл 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.
Офлайн
221
имхо вариант с сигнатурами не сложен и экономически более выгоден, чем например нечто такое:
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
Офлайн
0
Не совсем понимаю
JOHN_16, но исправил опечатки в “нечто таком” и все заработало, пока мне этого достаточно. Спасибо!
имхо вариант с сигнатурами не сложен и экономически более выгоден
Офлайн