Форум сайта python.su
0
Доброго времени суток!
Характеристики:
Python 2.7.x
Доп. модуль Grab
Проблема:
Пытаюсь написать “клиент” для сайта bash.im (только-только начал изучать питон, решил выполнить вроде как простейшую задачку), распределил весь код в 2 класса: loader(получение и сохранение данных сайта, используется модуль Grab) и gui (собственно, внешний вид на Tkinter и вызов класса loader), положил их в папку “bashclient”, в ней же создал файл “__init__.py” со следующим содержанием:
from .bashimclient import *
import sys import os path = os.path.abspath(os.path.dirname(sys.argv[0])) sys.path.insert(0,path) import bashimclient app = bashimclient.gui() app.mainloop()
Traceback (most recent call last): File "app.py", line 5, in <module> import bashimclient File "/media/max/SSD/Разработка/python/bash.im client/bashimclient/__init__.py", line 1, in <module> from .bashimclient import * ImportError: No module named bashimclient
Прикреплённый файлы:
bash.im client.zip (2,6 KБ)
Офлайн
253
from .bashimclient import *
from loader import loader from some_other import some_other
Отредактировано doza_and (Фев. 20, 2014 19:09:21)
Офлайн
9
Поправил код, запускается, но при нажатии на Quit (как я понял эта кнопка запрашивает следующую цитату) сл. цитата отображается некорректно. Для кэша, на мой взгляд, лучше использовать что-то вроде sqlite3.
Отредактировано alexsis (Фев. 20, 2014 19:39:55)
Прикреплённый файлы:
bash.im client.zip (2,2 KБ)
Офлайн
0
спасибо! гляну уже завтра
@doza_and, т.е.
from <ИМЯ_ФАЙЛА> import <ИМЯ_КЛАССА>
Офлайн
19
from .bashimclient import *Это relative import же?
Это инит пытается найти в папке bashimclient файл bashimclient.py
Отредактировано PanovSergey (Фев. 20, 2014 23:30:00)
Офлайн
0
@PanovSergey, я прочитал об этом в посте про zip-модули на Хабре: http://habrahabr.ru/company/acronis/blog/208378/
Офлайн
9
@alexsis, знаю, это временная мера. Я просто еще не решил, что использовать для базы - sqlite3, sqlalchemy или что-то другое, что бы ты посоветовал? Желательно, чтобы было что-то вроде PHPixie ORM или Yii ActiveRecordЯ бы взял sqlite3 для хранения таких данных.
Офлайн
0
еще вопрос - при запуске скрипта, автоматически запускает функцию refresh(), судя по всему, при создании кнопки self.btn.new, что тут не так:
# -*- coding: utf-8 -*- from Tkinter import * import loader #Empty class class stdObject: pass #GUI class class Gui(Frame): btn = stdObject() msg = stdObject() quote = {} # this dict will get quote info lastQuote = 0 #ID of last quote (for buttons) def nextQuote(self,direction = 'next'): quoteId = int(str(self.quote['id'])) print 'id: ' + str(quoteId) if(direction == 'next'): quoteId = int(quoteId - 1) else: quoteId = int(quoteId + 1) print 'New id: ' + str(quoteId) self.quote = loader.Loader().getQuote(quoteId) def refresh(self,direction='next'): self.nextQuote(direction) self.msg.quote['text'] = self.quote['text'] self.msg.quote.pack({'side' : 'bottom'}) def createWidgets(self): self.msg.quote = Message(self) self.msg.quote['text'] = self.quote['text'] self.msg.quote.pack({'side' : 'bottom'}) self.btn.new = Button(self) self.btn.new['text'] = '->' self.btn.new['command'] = self.refresh() self.btn.new.pack({'side':'right'}) #self.btn.back = Button(self) #self.btn.back['text'] = '<-' #self.btn.back['command'] = self.refresh(direction = 'back') #self.btn.back.pack({'side':'left'}) def wmConfig(self): self.master.title('Bash.im client') def __init__(self, master=None): self.quote = loader.Loader().getLastQuote() self.lastQuote = self.quote['id'] Frame.__init__(self,master) self.pack() self.createWidgets() self.wmConfig()
Офлайн
9
в атрибут command надо передать ф-цию, а вы передаете результат вызова ф-ции. Надо заменить
self.btn.new['command'] = self.refresh()
self.btn.new['command'] = self.refresh
Офлайн
0
@alexsis, спасибо!
pS: а что делать, если нужно передать параметр в функцию?
self.btn.back = Button(self) self.btn.back['text'] = '<-' self.btn.back['command'] = self.refresh(direction = 'back') self.btn.back.pack({'side':'left'})
Офлайн