Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3468 posts.

GUI » [PyGTK] Как лучше всего задавать padding при "упаковке" виджетов? » Июнь 12, 2009 16:29:13

При упакове виджетов (например, для gtk.VBox - start_pack) можно указать размер поля (padding) для того, что бы между виджетами было расстояние. Так вот вызовов start_pack при построении интерфейса (в данном случае не используется Glade) довольно-таки много и классов, в которых формируется GUI тоже. Вопрос в том, как лучше всего передавать такие настройки? Проще говоря, если я потом захочу, что бы расстояние между виджетами было не 5, а 7 пикселей, не хотелось бы править много файлов. Пока что решаю это на уровне переменной класса self._def_padding, которая используется во всех упаковках. Но может есть более элегантный способ? Например с помощью редактирования непосредственно тем GTK?

Базы данных » Подключение к ZODB через MySQL » Июнь 10, 2009 09:58:34

Доброго времени суток.
Пожалуйста, подскажите как подключиться к ZODB через MySQL или любую другую реляционную СУДБ (MS SQL, PostGreSQL и тд). Чтобы можно было нормально работать с данными, делать запросы и пр. Ищу уже долго но никак ничег оне могу найти, кроме инфы на оф. сайте “Zope имеет уровень абстракции ZSQL, позволяющий легко интегрировать систему с SQL серверами, будь то Oracle, PostgreSQL, MySQL или ODBC.”

но как это сделать - тишина…

Поясню, зачем оно надо: у нас стоит СЭД на основе ZOpe , но ее средств нехватает для создания отчетов, необходимых нам. Для этого и пытаюсь подключиться к ZODB, средством, которое понимаю (SQL-синтаксис)

Базы данных » Каким образом запрос делится на куски? » Июнь 6, 2009 11:47:28

Вот если мы SQLAlchemo'ский объект передаем паджинатору, то он быстро работает. А если обычный лист - результат API-шного запроса, то при каждом пэйджинге тормозится, видимо, каждый раз делит. А как бы так исхитриться, чтобы и обычный запрос по кусочкам делил на какждорй странице паджинатора?
Надеюсь, понятно сформулировал

GUI » PyGTK GtkList/TreeView - multiheader » Июнь 3, 2009 16:50:39

Ребята, скажите пожалуйста кто нибудь реализовывал на указанных компонентах многострочные заголовки для колонок с возможностью объединения как по горизонтали нескольких колонок в заголовке, так и во вертикали несколько ячеек в строках заголовка.

Такое требуется во многих финансовых отчетных программах.
Поделитесь опытом, пожалуйста.

Web » Adobe AIR » Июнь 3, 2009 15:44:19

В интернете поискал - есть какие-то обрывки фраз об интеграции Python и Adobe AIR, дабы разрабатывать приложения было удобнее. Кто-нибудь что-нибудь об этом знает?

Python для новичков » Teredo » Июнь 2, 2009 22:37:26

Здравствуйте! Интересует протокол Teredo, точнее как его можно использовать в программах на питоне.
Сам знаю мало, прошу сильно не ругать, сталкивался только с IPv4 и мне трудно понять новую идею, хотя и нравится.
Реализацию увидел в Utorrent под вистой. Там данные передаются через teredo, если указать это в опциях. И это показалось мне очень удобным способом, ведь своего постоянного ip-адреса у меня нет.

Если есть примеры реализаций, или другое подобное, но более простое, с нетерпением жду! :)

GUI » wx.MessageBox Не понятна логика.. » Июнь 1, 2009 10:47:20

Всем привет.
Есть код:
# -*- coding: cp1251 -*-
import wx

class Panel(wx.Panel):
def __init__(self, parent, *args, **kwargs):
wx.Panel.__init__(self, parent, *args, **kwargs)
sizer = wx.BoxSizer(wx.VERTICAL)
self.dat = wx.DatePickerCtrl(self, style=wx.DP_DROPDOWN)
sizer.Add(self.dat)
self.SetSizer(sizer)
wx.EVT_DATE_CHANGED(self.dat, self.dat.GetId(), self.DateChanged)
def DateChanged(self, evt):
wx.MessageBox('message text', 'message caption', wx.ICON_ERROR|wx.OK, self)
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = Panel(self)

class App(wx.App):
def __init__(self):
wx.App.__init__(self)
# wx.App.__init__(self, True, 'log.txt')
frame = MainFrame(None)
frame.Show(True)

if __name__ == "__main__":
app = App()
app.MainLoop()
При попытке изменить дату, выпадает календарь на текущий месяц. В левом и правом уголках этого календаря есть кнопки для прокрутки месяца – месяц назад и месяц вперед соответственно. Но это все стандартно. Так вот, при клике по одной из этих кнопок, событие изменения даты обрабатывается в методе DateChanged и , собственно, в нем вызов MessageBox. Вроде все нормально, никакиз аномалий. Но..когда сообщение закрываешь, нажатая кнопка на каледаре “западает” – месяца начинают переключаться беспрерывно и, также беспрерывно, начинают появляться новые сообщения. Переписал код так:
# -*- coding: cp1251 -*-

import wx

class Panel(wx.Panel):
def __init__(self, parent, *args, **kwargs):
wx.Panel.__init__(self, parent, *args, **kwargs)
sizer = wx.BoxSizer(wx.VERTICAL)
self.dat = wx.DatePickerCtrl(self, style=wx.DP_DROPDOWN)
sizer.Add(self.dat)
self.SetSizer(sizer)
wx.EVT_DATE_CHANGED(self.dat, self.dat.GetId(), self.DateChanged)
def show_mes(self, text):
wx.MessageBox(text,'message caption', wx.ICON_ERROR|wx.OK, self)
def DateChanged(self, evt):
wx.CallAfter(self.show_mes, 'message text')
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = Panel(self)

class App(wx.App):
def __init__(self):
wx.App.__init__(self)
# wx.App.__init__(self, True, 'log.txt')
frame = MainFrame(None)
frame.Show(True)

if __name__ == "__main__":
app = App()
app.MainLoop()
проблема решилась. Но все таки осталось непонятным, почему вообще появилась такая проблема “зацикливания” события? Проблема в кривых руках или MessageBox извращенным способом играется с какими-то событиями? Кто-нибудь может все по полочкам разложить?

З.Ы. Думал как это лучше объяснить, надеюсь получилось понятно :)

Web » Кто-нибудь использует Pyjamas? » Май 29, 2009 02:55:04

http://pyjs.org/

Здесь он упоминается пару раз мельком, что мол есть такой проект, да заброшен. Но вот смотрю, последний релиз апрельский. Кому-нибудь пригождался?

Python для экспертов » pythonOCC + Qt4 » Май 27, 2009 10:11:12

Всем здравствуйте!
Может ли кто-нибудь помочь готовым примерчиком, как увязать python + OpenCASCADE + Qt4
Собственно заминка в том, чтобы отобразить 3D-сцену каскада на qt-форме

Pyramid / Pylons / TurboGears » i18n и routes » Май 26, 2009 07:28:51

Возникла потребность в i18n и хотелось бы реализовать его в ссылках как это везде принято, т.е. “/locale/*url”. У меня к тому же нужно что бы ссылки были без “/locale” и открывали язык по умолчанию. И по этому я сделал обертку:
def locale(map, *args, **kwargs):
map.connect("/:locale"+args[0],*args[1:],**kwargs)
map.connect(locale='en', *args, **kwargs)
Как можно это реализовать лучше?

GUI » wxPython IEHtmlWindow прокрутка страницы программно » Май 25, 2009 09:06:04

Привет всем.
Появилась некая трудность. Есть экземпляр IEHtmlWindow, в него подгружается html форматированный текст из переменной методом LoadString. Текст может быть очень длинным. Необходимо сразу после загрузки прокрутить весь текст вниз до конца.
Над проблемой размышлял с товарищем – безрезультатно. Пробовали метод SetScrollPos, не работает – ни ошибок, ни результата работы.
Также пробовали ScrollLines и ScrollPages – также неработают…
В итоге в html код вставили javascript, который после загрузки страницы сам ее прокручивает вниз и были счастливы :) Но не долго…
Оказалось, что не на всех машинах включен javascript…Поэтому и прокрутка, сделанная таким образом, несрабатывает.
# -*- coding: cp1251 -*-

import wx
from wx.lib.iewin import IEHtmlWindow

html = """<HTML><TITLE></TITLE><HEAD>
<script language="JavaScript">
function scroll()
{
h = getDocumentHeight();
setscroll(h)
}
function getDocumentHeight()
{
return (document.body.scrollHeight > document.body.offsetHeight)?
document.body.scrollHeight:
document.body.offsetHeight;
}
function setscroll(h)
{
window.scrollTo(0,h);
}
</script>
</HEAD>
<BODY onLoad="scroll();">
<p>Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
</BODY>
</HTML>"""

class Frame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.ie = IEHtmlWindow(self)
self.ie.LoadString(html)
# while self.ie.ScrollLines(1):
# pass
class App(wx.App):
def __init__(self):
wx.App.__init__(self, True, 'log.txt')
frame = Frame(None)
self.SetTopWindow(frame)
frame.Show()

if __name__ == "__main__":
app = App()
app.MainLoop()
1. Может кто сталкивался с такими вещами и знает почему не работает и как заставить IEHtmlWindow прокрутить текст?
2. Если 1ый вопрос не решится, то придется насильно включать javascript на клиентских машинах. Править реестр – первое что пришло в голову. Может есть иные методы?

GUI » Стандартные картинки для Toolbar'а » Май 23, 2009 11:59:29

Когда я создаю wx.MenuItem со стандартным идентификтором (например, wx.ID_NEW) она автоматически получает соответствующую иконку, специфичную для платформы, на которой запускается приложние. Есть ли возможность получить стандартные иконки для кнопок Toolbar'a?

Спасибо.

Network » telnet client под windows » Май 21, 2009 20:09:33

import sys
import telnetlib

HOST = "localhost"
tn = telnetlib.Telnet(HOST);
data = tn.read_very_eager()
print (data)
tn.close();
Может кто подскажет подключаюсь к windows telnet server и получаю пустую строку.

Python для новичков » Radmin + PrintScreen » Май 21, 2009 16:37:28

Привет всем!!!
Есть сервер Windows 2003 на нем настроен сервер терминалов и установлен Radmin и есть еще SSHd. Хочу чтобы при заходе браузером на страничку запускался скрипт, который бы запускал Radmin, проходил авторизацию, делал принтскрин и слаживал мне все это в папку. В принципе накодил такой, не доконца, до веб странички еще не добрался, и этот скрипт работает только при условии что запущен сеанс, а вот если подключиться через ssh и пнуть его, то не получается снять принскин, экзепшн вываливается, ну оно то и понятно, окна то нет. Как пофиксить или может есть какие другие пути решения?
Код скрипта:
import win32gui, win32ui, win32process, win32com.client
import os
import subprocess
import errno
import time
import sys
import win32api
import win32com.client

def get_screen(path):

hwnd = win32gui.GetDesktopWindow()
l,t,r,b = win32gui.GetWindowRect(hwnd)
h = b-t
w = r-l
hDC = win32gui.GetWindowDC(hwnd)
myDC = win32ui.CreateDCFromHandle(hDC)
newDC = myDC.CreateCompatibleDC()
myBitMap = win32ui.CreateBitmap()
myBitMap.CreateCompatibleBitmap(myDC, w, h)
newDC.SelectObject(myBitMap)
newDC.BitBlt((0,0),(w, h) , myDC, (0,0), win32con.SRCCOPY)
myBitMap.Paint(newDC)
myBitMap.SaveBitmapFile(newDC, path)

def radmin_auth(password, delay):

shell = win32com.client.Dispatch("WScript.Shell")
#shell.AppActivate("remote")
#win32api.Sleep(1000)
time.sleep(1)
shell.SendKeys(password)
shell.SendKeys("{TAB}")
time.sleep(1)
shell.SendKeys("{ENTER}")
time.sleep(delay)

#==========================================================

if __name__ == "__main__":

bankomat_name = { 'aaa:1' }

bankomat_ip = ['1.1.1.1]

bankomat_pass = ['123']
bankomat_delay = [3, ]
bankomat_photo = [ 'atmb1701.bmp' ]

try:
bankomat = sys.argv[1]
number = bankomat_name[bankomat]
except:
print "enter bankomat number"
sys.exit(1)
photo_path = "C:\\temp\\atmb\\"
path = "\"C:\\Program Files\\Radmin\\radmin.exe \" /connect:" + bankomat_ip[number] + ":4899 /noinput /fullscreen"
proc = subprocess.Popen(path)
time.sleep(1)
radmin_auth(bankomat_pass[number], bankomat_delay[number])
try:
get_screen(photo_path+bankomat_photo[number])
except:
print "can't get printscreen"
time.sleep(1)
proc.terminate()

Python для экспертов » pysvn cached creditials » Май 19, 2009 09:21:31

Подскажите, пожалуйста, может кто знает, как в pysvn узнать от имени какого пользователя я собираюсь сейчас совершать операции, если таковое было ранее сохранено в кеше?

простые не ответы на вопрос:
- на сайте тигриса напрямую ответа нету (или я не так смотрю)
- get_default_username - это не то
- .subversion читать не могу, он разный для разных ОС
- callback_get_login тоже не для того (или как-то можно заставить его вызываться всегда)
- бекдор с переспрашиванием не подойдёт, пароль был сохранён другим клиентом.

Python для новичков » вопрос по cx_Oracle и Ораклу в целом... » Май 18, 2009 16:33:13

есть тесты…которые проверяют расчеты в БД Oracle.
некотроые запросы идут по 5-10 мин…
как через cx_Oracle удостовериться что сессия оборвалась..и не продолжает безконтрольно орудовать в базе?

Web » mod_apache: Загрузка и выгрузка модулей handler'ов » Май 18, 2009 12:07:11

Доброе время суток!
Для разработки веб-приложений использую apache+mod_python и его publisher handler (процесс разработки упрощается и нет проблем со статическим контентом). Для подключения к БД использую пул SQLAlchemy. Все работает, все прекрасно.
Когда возникла необходимость держать пул POP3-подключений, пришлось немного поимпровизировать:
1) в модуле index.py, содержащем все обработчики, объявлен словарь:
pop3_pool = {}
2) при обработке запроса проверяется, содержит ли “пул” подключение для текущей сессии:
if session.id() in pop3_pool:
3) если подключение не установлено, происходит редирект на страницу логина, в противном случае запрос обрабатывается (отображается список писем, отображается выбранное письмо и т.д.)
Однако, через некоторое время заметил фичу: если не отправлять запросы серверу некоторое время, словарь pop3_pool опустошается. Проверка подтвердила, что при отсутствии запросов модуль выгружается из памяти, и его глобальные переменные, соответственно, инициализируются заново. При использовании пула подключений к БД я этого не замечал, поскольку переподключение при вызове create_engine происходило автоматически. В данном случае такое поведение неприемлемо, т.к. при переподключении индекс письма может измениться (например, при удалении письма с другого подключения) и операция будет произведена не над тем письмом, которое было выбрано для обработки.
Как можете посоветовать решить такую проблему? WSGI, FastCGI (не сталкивался ранее ни с тем, ни с другим)? Опции Python* в .htaccess'е?
Заранее спасибо!

Zope/Plone/Bluebream » Обзор обновлений некоторых продуктов Plone » Май 14, 2009 16:06:29

Обзор включает в себя информацию об изменениях и обновлениях в следующих продуктах Plone:

* Plone Comments
* PloneFormGen
* Poi
* Faculty Staff Directory
* PloneSEO
* Real Estate Broker
* Plone Get Paid
* Singing & Dancing
* Plone True Gallery

Обзор опубликован в разделе Plone: Обзор недавних релизов Продуктов Plone.

Оригинал статьи на www.contentmanagementsoftware.info
http://www.komtet.ru/info/plone/obzor-nedavnih-relizov-produktov-plone

Pyramid / Pylons / TurboGears » Открыт код движка Orphereus » Май 14, 2009 08:45:41

Новость с ЛОР:
Состоялся релиз движка имиджборд «Orphereus» - системы, разработанной на Python-фреймворке Pylons и включающей множество новаторских возможностей. под GPLv2
http://code.google.com/p/orphereus/source/browse/

Интересно будет код посмотреть ;)

Network » структура приложения для twisted-based » Май 10, 2009 10:59:47

У меня похоже совершенно не совместимая с twisted версия мозга… Все эти tap'ки и tac'и… :/ А пока я жду выхода апдейта не подскажите ли какую структуру лучше сделать для следующего приложения:

Есть основная часть которая представляет из себя только совокупность сервисов сетевых (если быть точным то conch который SSH, web и pymodbus) и должна запускаеться как демон и есть отдельный модуль-сервис который не занимается сетью напрямую а представляет из себя только тред для вычислений (спасибо тов. bw) который со всем остальным взаимодействует через контексты. Последний сервис должен иметь возможность динамически подгружаться/выгружаться (тоесть можно стартовать и без него), конфиг для него очень большой и посему а также по еще некоторым причинам будет лежать в недрах яйца как просто .py-файл…

Вот как лучше сие реализовать? Всё запихнуть в один плагин или всё запихнуть в один плагин а последний модуль в другой? или всё сделать через .tac? или может есть еще варианты?