Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2014 10:34:10

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

listbox управление кнопками

#Нужно создать окно с возможностью выбора базы данных. Базы данных должны находиться в одной директории, но их имена мне известны. Созданные БД 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)

Офлайн

#2 Апрель 27, 2014 12:55:24

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

listbox управление кнопками

Претендент на эталон “как не надо составлять сообщение”.:mad: Когда

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

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

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




_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Апрель 27, 2014 16:06:24

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

listbox управление кнопками

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

Задача заключается в отображении списка БД (не в способе отображения, а получении списка уже существующих БД в нужной директории).

Офлайн

#4 Апрель 27, 2014 17:59:44

wiygn
Зарегистрирован: 2012-08-19
Сообщения: 52
Репутация: +  2  -
Профиль   Отправить e-mail  

listbox управление кнопками

Если я правильно понял задачу, то нужно определить является ли файл 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.

Возможно существуют способы и получше, посмотрели бы как это реализовано в других программах.

Офлайн

#5 Апрель 28, 2014 00:10:46

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

listbox управление кнопками

имхо вариант с сигнатурами не сложен и экономически более выгоден, чем например нечто такое:

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
Плюс нужно делать проверку на то что файл не пуст. Сюрпризом оказалось что пустой файл подобный код обрабатывает без ошибок возвращая по запросу пустой список.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Май 2, 2014 17:38:58

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

listbox управление кнопками

Не совсем понимаю

JOHN_16
имхо вариант с сигнатурами не сложен и экономически более выгоден
, но исправил опечатки в “нечто таком” и все заработало, пока мне этого достаточно. Спасибо!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version