Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3492 posts.

GUI » Выравнивание текста по ширине в Tkinter » Янв. 20, 2014 04:57:06

Мне надо выровнять текст по ширине в виджете Text. Имеются опции justify='left', justify='center' и justify='right'.
Согласно вот этому руководству:
выравнивание (justify)
Допустимыми значениями являются строки: “left” (по левому краю), “center” (по центру), “right” (по правому краю) и “fill” (по ширине).
Однако
txt.tag_configure('filled',justify='fill')
txt.tag_add('filled','1.0','end')
вызывает ошибку
_tkinter.TclError: bad justification “fill”: must be left, right, or center
У меня Python 3.1.3.

Web » OpenERP » Янв. 17, 2014 19:12:11

что вы знайте об OpenERP

GUI » pyqt ошибка при добавления виджета на сцену » Янв. 11, 2014 21:58:16

        but = QtGui.QPushButton(view)
        self.scene.addWidget(but)
этот код добавляет кнопку на сцену и она таки добавляется, но при этом пишет ошибку:
"QGraphicsProxyWidget::setWidget: cannot embed widget 0x1fa8a20 which is not a toplevel widget, and is not a child of an embedded widget"
почему и как исправить?
помогите пожалуйста

Центр помощи » Диплом(python/django) » Янв. 6, 2014 12:52:23

Здравствуйте.
Я студент 5-го курса, программист, в этом году нужно защищать диплом. Особо никогда не увлекался программированием, только лабы, курсовые, ничего для себя. Руководитель сказал что тему я должен предложить сам. Вот только придумать я ничего не могу. Была идея написать систему стримминга, но не смог найти подходящей информации для реализации.
В общем, хотел узнать может кто делал такую систему, и может помочь с литературой(web-ресурсами), или предложить другую тему.

Django » MPTT Дерево "Категория-товар" в админке » Янв. 2, 2014 13:11:10

С ноября не могу сделать отображение в админке в виде:
Категория1
::категория2
::::товар1
::::товар2
Категория3
::товар3

Перепробовал огромное множество разновидностей mptt. feinCMS у меня вообще почему-то не идёт, ругается при добавляении в INSTALLED_APPS. Особо в тему не вникал.
Остановился на django_mptt_admin. Он позволяет использовать drag&drop. Стандартный MPTTModelAdmin дают какой-то совсем убогий отступ:

До этого работал год с самописным вэб-движком на питоне. Там это дерево я бы за 20 минут сделал объединённый sql-запрос и нарисовал всю архитектуру с отступами, с d&d помучался бы пару дней на qjuery, но всё равно бы сделал. Здесь ковыряюсь уже 2й месяц и не продвинулся ни на шаг. Меня предупреждали о головняке, но не думал что я нарвусь на него прямо с ходу. Обычный интернет-магазин и подобная структура в виде иерархии дерева нужна каждому. Иначе попробую, разберись в 10 тыс наименованиях.

models.py

import mptt
from django.db import models
from mptt.models import MPTTModel, TreeForeignKey 
class Folder(MPTTModel):
    name = models.CharField(max_length=255, default='/', verbose_name=u'Имя')
    parent = TreeForeignKey('self', null=True, blank=True,related_name='child')
    def __unicode__(self): 
        return self.name
        
    class MPTTMeta:
        parent_attr = 'parent'
class Product(models.Model):
    parent = models.ForeignKey(Folder, blank=True, null = True, related_name='child_product')
    name = models.CharField(max_length=255, db_index=True, verbose_name=u'Имя')
    price = models.CharField(max_length=8, db_index=True, verbose_name=u'Цена')
    
    def __unicode__(self): 
        return self.name
mptt.register(Folder)
mptt.register(Product)  
admin.py
from offers.models import Product, Folder
from django_mptt_admin.admin import DjangoMpttAdmin
from django.contrib import admin
admin.site.register(Product, DjangoMpttAdmin)
admin.site.register(Folder, DjangoMpttAdmin)

Данный код выдаёт деревья только исключительно внутри одной модели. Т.е.
parent = models.ForeignKey(Folder, blank=True, null = True, related_name='child_product')
лезет не в модель Folder, а ищет свой id, будто первый параметр ‘self’.

Строит архитектуру, будто файл идёт от файла, хотя чёрным по белому написано, что родителя надо смотреть в модели Folder.
Лично мне всё равно у какой модели будет отображаться всё дерево, я уже буду счастлив просто его увидеть. Чтобы были и папки и товары внутри.

Network » Проблема с NetSNMP netsnmp.set » Дек. 31, 2013 10:04:46

Вообщем ситуация такая есть некий скрипт для сохранения конфигов свичей.

    var1 = netsnmp.Varbind('1.3.6.1.4.1.171.12.1.2.1.1.3',3, '10.100.1.100','IPADDR')
			res1 = netsnmp.snmpset(var1, Version = 2, DestHost = ipsw, Community='private')	
			

Проблема в следующем:
При попытке установить IP TFTP сервера свич отвечает что wrongLength@1 E:171.12.1.2.1.1.3.3=10.100.1.100.0.0.0.0 } }
Вывод tcpdump:
12:38:57.007747 IP (tos 0x0, ttl 64, id 29533, offset 0, flags , proto UDP (17), length 86)
192.168.16.116.50046 > 10.100.0.57.snmp: { SNMPv2c C=private { SetRequest(42) R=1290148045 E:171.12.1.2.1.1.3.3=10.100.1.100.0.0.0.0 } }
12:38:57.010054 IP (tos 0x0, ttl 29, id 35776, offset 0, flags , proto UDP (17), length 92)
10.100.0.57.snmp > 192.168.16.116.50046: { SNMPv2c C=private { GetResponse(44) R=1290148045 wrongLength@1 E:171.12.1.2.1.1.3.3=10.100.1.100.0.0.0.0 } }

Network » Библиотека для отсылки jabber уведомлений » Дек. 28, 2013 07:53:18

Пробовал, sleekxmpp не понравилось как-то замудрено там все, ну и не нашел как выставить таймаут для ресолвинга домена. xmppy не очень понравилась, какие вы используете jabber библиотеки для рассылки уведомлений по jabber-у?

GUI » PyQT4 Прозрачность в форме с png фоном » Дек. 22, 2013 21:09:43

Ребята все понимаю, наверно 100500 раз спрашивали по этому поводу. Просидел целую ночь, но так и не понял как сделать с нормальной прозрачностью фон основной формы, перепробовал все методы. Получаеться чернота, там где должна быть прозрачная тень. Спасибо за внимание, спасибо этому форуму, тут очень отзывчивые люди))
Жду ответа!

GUI » PyOpenGL-accelerate + numpy » Дек. 19, 2013 12:01:17

Всем доброго дня
Устанавливаю MakeHuman, все зависимости поставились, но при запуске питон ругается
SYS.VERSION: 2.7.3 (default, Jan  2 2013, 13:56:14)  [GCC 4.7.2]
SYS.PLATFORM: linux2
PLATFORM.MACHINE: x86_64
PLATFORM.PROCESSOR: 
PLATFORM.UNAME.RELEASE: 2.6.32.26
PLATFORM.LINUX_DISTRIBUTION: debian 6.0.6 
NUMPY.VERSION: 1.6.2
OpenGL_accelerate module loaded
Using accelerated ArrayDatatype
Unable to load numpy_formathandler accelerator from OpenGL_accelerate
Unable to load registered array format handler numeric
Traceback (most recent call last):
  File "makehuman.py", line 310, in <module>
    main()
  File "makehuman.py", line 300, in main
    from mhmain import MHApplication
  File "./core/mhmain.py", line 32, in <module>
    import mh
  File "./lib/mh.py", line 29, in <module>
    from glmodule import updatePickingBuffer, grabScreen, hasRenderSkin, renderSkin
  File "./lib/glmodule.py", line 33, in <module>
    from OpenGL.GL import *
  File "/usr/lib/python2.7/dist-packages/OpenGL/GL/__init__.py", line 3, in <module>
    from OpenGL.raw.GL.annotations import *
  File "/usr/lib/python2.7/dist-packages/OpenGL/raw/GL/annotations.py", line 40, in <module>
    'v',
  File "/usr/lib/python2.7/dist-packages/OpenGL/arrays/arrayhelpers.py", line 197, in setInputArraySizeType
    function.setPyConverter( argName, asArrayTypeSize(type, size) )
  File "arraydatatype.pyx", line 393, in OpenGL_accelerate.arraydatatype.AsArrayTypedSizeChecked.__init__ (src/arraydatatype.c:7688)

Никто не сталкивался с проблемой связки PyOpenGL-accelerate + numpy?

Центр помощи » Напишите скрипт за $ » Дек. 17, 2013 22:43:16

задание в аттаче

все предложения на почту reklamaden@gmail.com

спасибо

Флейм » Ищем разработчика на Python (Django) в офис в Москве » Дек. 17, 2013 13:18:00

В новый проект требуется разработчик на Python (Django). 30-40% функционала реализовано и работает. Текущий разработчик доступен и будет доступен в будущем для передачи дел и обмена опытом. Проект реализуется в рамках холдинга, оказывающего услуги в области интернет-технологий.

Нужно разработать
1. Кабинет клиента
1.1. Клиентский функционал
1.2. Биллинг
1.2.1. Интеграция с платежными системами
1.2.2. Документооборот (счета, выписки и т.д.)
1.2.3. Управленческая база
2. Рассылка (индивидуальные письма, >5 000 подписчиков)

Необходимые знания и навыки
1. Unix (Debian…)
2. Python
3. Знакомство с Django

Условия работы
• Работа в офисе в Москве.
• Срок - с января по март, включительно. Если по итогам марта проект демонстрирует нужные показатели - берем на постоянную работу. Если не показывает - он целиком закрывается. У нас есть результаты полевого тестирования разработанной части сервиса, и они позволяют быть уверенными в успехе, но мы честно предупреждаем.
• Оплата - от 60 000 руб. в месяц по результатам собеседования.

Контакты
Соловьев Антон - 7641109@gmail.com

Python для экспертов » Tkinter and daemon » Дек. 16, 2013 21:06:55

Если скрипт является демоном, он, что - подавляет также и создание окон с помощью Tkinter?
Есть класс, который являясь демоном, должен выдавать разные сообщения через определённые промежутки времени, но не пашет. При этом в логе демона ошибок нет. Если же унаследовать с этого класса постройку сообщения и выдать, но уже не “демонически”, то всё ок. Так что же делать?

п.с. есть один извращенный способ - вынести всё с tkinter в отдельный модуль и запускать из демона через subprocess.Popen(), но, может быть кто-то знает лучшее решение проблемы.

Python для новичков » Расширение .xdb » Дек. 16, 2013 07:53:14

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

GUI » скролл curses.newpad, ограничения? (скролл работает) » Дек. 15, 2013 18:20:14

Наблюдаю явление, которому не могу найти объяснение.
Пишу в своё удовольствие рогалик, сейчас работаю над генерацией уровня. Просмотр сгенерёного уровня делаю с помошью curses.newpad, скролл которого делаю следующим образом:
        while True:
            c=stdscr.getch()
            if c == ord ('q'):
                break
            if c == ord ('w'):
                cl.scroll (0, -1)
            if c == ord ('a'):
                cl.scroll (-1, 0)
            if c == ord ('s'):
                cl.scroll (0, 1)
            if c == ord ('d'):
                cl.scroll (+1, 0)
            cl.refresh ()

где cl.scroll это

    def scroll (self, __x, __y):
        """Change _x, _y according to arguments. Does not refresh,\
        but sets variables for refresh() to run. """
        assert isinstance (__x, int)
        assert isinstance (__y, int)        
        if self._x == self.lvl.min_x - 2*self.draw_length and __x < 0:
            __x = 0
        elif self._x == self.lvl.max_x + 2*self.draw_length+15 and __x > 0:
            __x = 0
        self._x +=__x
        if self._y == self.lvl.min_y - 2*self.draw_length and __y < 0:
            __y = 0
        elif self._y == self.lvl.max_y + 2*self.draw_length+15 and __y > 0:
            __y = 0
        self._y +=__y

потом делаю pad.refresh ()

Скролл работает, однако в некоторых случаях (когда уровень получается сильно разлапистым) получается, что вниз и вправо скролл не захватывает весь уровень. При этом размеры pad и уровня вполне правильны:
“l” это уровень, “cl” это curses.newpad
In [5]: l
Out[5]: Level (room_size_min = 5, room_size_max = 7,        room_type = "random", digger_where_to = (2, 4, 6, 8),         digger_stamina = 6, doors_are_useful = True,         min_rooms = 5, max_rooms = 10, room_times = 1)
In [6]: l.size_y, l.size_x
Out[6]: (121, 101)
In [7]: cl.pad.getmaxyx()
Out[7]: (123, 103)
Вопрос: может в curses есть какой-то максимальный размер объекта или что? По докам про curses не припоминаю такого. По переменным я понять в чём дело не могу.

Python для экспертов » C++ Qt в Python и PyQt » Дек. 15, 2013 00:06:02

Привет, дорогие форумчане.
Возникла проблема. Я хочу писать динамические библиотеки на C++.
И Использовать их в python. По роду задачи мне необходим будет QT и его механихм сигналов-слотов.
Загружать библиотеки я буду скорее всего с помошью QPluginLoader.
Гуглил-гуглил и гагуглил вот такую штуку http://pyqt.sourceforge.net/Docs/sip4/using.html#ref-using

И у меня возникли проблемы именно на этапе с QT.
И так у меня есть такие файлы.

hello.h
// Define the interface to the hello library.
#include <qlabel.h>
#include <qwidget.h>
#include <qstring.h>
class Hello : public QLabel {
    // This is needed by the Qt Meta-Object Compiler.
    Q_OBJECT
public:
    Hello(QWidget *parent);
private:
    // Prevent instances from being copied.
    Hello(const Hello &);
    Hello &operator=(const Hello &);
};
//void setDefault(const QString &def);

hello.cpp
#include "hello.h"
#include "stdio.h"
/*
void setDefault(const QString &def)
{
	
}
*/
Hello::Hello(QWidget *parent = 0):QLabel(parent)
{
	printf("First Qt example function");
}
Hello::Hello(const Hello &)
{
	
}
Hello &Hello::operator=(const Hello &)
{
	return *this;
}

proj.pro
QT       += core gui
TARGET = hello
TEMPLATE = lib
SOURCES += hello.cpp
HEADERS  += hello.h
Это всё относилось к библиотеке.

Теперь, следуя инстукциям из турториала я создал вот такие файлы

hello.sip
// Define the SIP wrapper to the hello library.
%Module hello
%Import QtGui/QtGuimod.sip
%If (Qt_4_2_0 -)
class Hello : public QLabel {
%TypeHeaderCode
#include <hello.h>
%End
public:
    Hello(QWidget *parent /TransferThis/ = 0);
private:
    Hello(const Hello &);
};
%End

configure.py
import os
import sipconfig
from PyQt4 import pyqtconfig
# The name of the SIP build file generated by SIP and used by the build
# system.
build_file = "hello.sbf"
# Get the PyQt configuration information.
config = pyqtconfig.Configuration()
# Get the extra SIP flags needed by the imported PyQt modules.  Note that
# this normally only includes those flags (-x and -t) that relate to SIP's
# versioning system.
pyqt_sip_flags = config.pyqt_sip_flags
# Run SIP to generate the code.  Note that we tell SIP where to find the qt
# module's specification files using the -I flag.
os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "-I", config.pyqt_sip_dir, pyqt_sip_flags, "hello.sip"]))
# We are going to install the SIP specification file for this module and
# its configuration module.
installs = []
installs.append(["hello.sip", os.path.join(config.default_sip_dir, "hello")])
installs.append(["helloconfig.py", config.default_mod_dir])
# Create the Makefile.  The QtGuiModuleMakefile class provided by the
# pyqtconfig module takes care of all the extra preprocessor, compiler and
# linker flags needed by the Qt library.
makefile = pyqtconfig.QtGuiModuleMakefile(
    configuration=config,
    build_file=build_file,
    installs=installs
)
# Add the library we are wrapping.  The name doesn't include any platform
# specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
# ".dll" extension on Windows).
makefile.extra_libs = ["hello"]
# Generate the Makefile itself.
makefile.generate()
# Now we create the configuration module.  This is done by merging a Python
# dictionary (whose values are normally determined dynamically) with a
# (static) template.
content = {
    # Publish where the SIP specifications for this module will be
    # installed.
    "hello_sip_dir":    config.default_sip_dir,
    # Publish the set of SIP flags needed by this module.  As these are the
    # same flags needed by the qt module we could leave it out, but this
    # allows us to change the flags at a later date without breaking
    # scripts that import the configuration module.
    "hello_sip_flags":  pyqt_sip_flags
}
# This creates the helloconfig.py module from the helloconfig.py.in
# template and the dictionary.
sipconfig.create_config_module("helloconfig.py", "helloconfig.py.in", content)
helloconfig.py.in
from PyQt4 import pyqtconfig
# These are installation specific values created when Hello was configured.
# The following line will be replaced when this template is used to create
# the final configuration module.
# @SIP_CONFIGURATION@
class Configuration(pyqtconfig.Configuration):
    """The class that represents Hello configuration values.
    """
    def __init__(self, sub_cfg=None):
        """Initialise an instance of the class.
        sub_cfg is the list of sub-class configurations.  It should be None
        when called normally.
        """
        # This is all standard code to be copied verbatim except for the
        # name of the module containing the super-class.
        if sub_cfg:
            cfg = sub_cfg
        else:
            cfg = []
        cfg.append(_pkg_config)
        pyqtconfig.Configuration.__init__(self, cfg)
class HelloModuleMakefile(pyqtconfig.QtGuiModuleMakefile):
    """The Makefile class for modules that %Import hello.
    """
    def finalise(self):
        """Finalise the macros.
        """
        # Make sure our C++ library is linked.
        self.extra_libs.append("hello")
        # Let the super-class do what it needs to.
        pyqtconfig.QtGuiModuleMakefile.finalise(self)
Ну и на закуску, скрипт, который будет всё это дело тестировать.
import hello
h = hello.Hello()
print h
Ну и вот моя последовательность действий

$qmake-qt4 
$make    # это я собираю библиотеку libhello.so
$ python ./configure.py 
$ make 
/usr/bin/ld: cannot find -lhello
collect2: error: ld returned 1 exit status
make: *** [hello.so] Error 1 
Эту ошибку я исправил добавлением -L. в Makefile
$ ls
configure.py       hello.cpp  hello.o    hello.so       libhello.so.1.0    moc_hello.cpp  pythontest.py        siphellocmodule.o
helloconfig.py     hello.exp  hello.sbf  libhello.so    libhello.so.1.0.0  moc_hello.o    sipAPIhello.h        siphelloHello.cpp
helloconfig.py.in  hello.h    hello.sip  libhello.so.1  Makefile           proj.pro       siphellocmodule.cpp  siphelloHello.o
До этого момента всё нормально. Ну и запуск тест-скрипта
Traceback (most recent call last):
  File "./pythontest.py", line 1, in <module>
    import hello
ImportError: libhello.so.1: cannot open shared object file: No such file or directory
Кто-то мне объяснит где я ошибаюсь?! А то я не до конца понимаю, что я делаю

Центр помощи » поверхность в matplotlib » Дек. 11, 2013 19:24:03

не могу понять как создать поверхность с помощью Axes3D.plot_surface(x, t, uu) где:
x=np.arange(0,11,1)
t=np.arange(0,21000,1000)
x,t=np.meshgrid(x,t)
uu=[]
for j in range(11):
    l = [round(u[j,1000*i]) for i in range(21)]
    uu.append(l)

Поверхность получается какой-то… нетакой. как я понимаю из-за того, что x,t и uu должны быть квадратными матрицами.
а мне нужно чтобы сетка по одной координате была в N раз чаще, чем по другой. (в данном случае в 2 раза)
Помогите плиз как это можно сделать.

Обновление
В общем! есть матрица решений краевой задачи u. она 11 на 20001. хочу визуализировать решение, построив поверхность. построил 11 на 11 с помощью matplotlib, выбрав 11 значений из u по t через каждые 2000.
теперь задача построить это решение с разным масштабом по х и по t.

Python для новичков » [РЕШЕНО] Grab - как использовать solve_recaptcha()? » Дек. 5, 2013 20:41:58

Привет.
В общем, проблема в следующем:
solve_recaptcha() возвращает challenge и solution. При выводе логов работы парсера, челендж и солюшен выводятся на экран, потом отсылается пост запрос со всеми данны включае вышеприведенные, и так же тело запроса выводится на экран. Так вот, строка с challenge получается обрезанной, вида “M6TxUfb7VnarGO_nj…”, но вместо многоточия должны идти ещё символы. В итоге, получаю строку “DEBUG:root:Unknown recaptcha implementation”. Знатоки, подскажите пожалуйста, в чем может быть проблема?

                        chall, solution = cap.solve_recaptcha(grab.clone())
                        print "======================= "+str(chall)
                        print "======================= "+str(solution)
                        grab.set_input('username', site_data['login'])
                        grab.set_input('password', site_data['password'])
                        grab.set_input('recaptcha_response_field', solution)
                        grab.set_input('recaptcha_challenge_field', chall)
                        grab.submit()

Прошу прощения, поторопился с вопросом. Как оказалось в коде было два submita() =).

Django » ListView с формой » Дек. 4, 2013 08:03:21

Народ, подскажите как правильнее сделать вьюху на CBV (listview) c формой поиска
мой воспаленный мозг, придумал только такое

class ItemsList(ListView):
    template_name = 'items_list.html'
    queryset = Item.objects.all()
    def get_context_data(self, **kwargs):
        context = super(ItemsList, self).get_context_data(**kwargs)
        context['form'] = SearchForm()
        return context
def search(request):
    if 'search' in request.GET and request.GET['search']:
        search = request.GET['search']
        form = SearchForm(request.GET)
        if form.is_valid():
            art = Item.objects.filter(Q(title__icontains=search))
        else:
            art = []
    else:
        form = SearchForm()
        art = []
    c = RequestContext(request, {'items':art, 'form':form})
    return render_to_response('search_list.html',c)

так же, не могу понять как сделать валидацию, чтобы из ItemsList нельзя было отправлять пустое значение
насколько понимаю нужно делать валидацию в самом ItemsList, но хз как…

Центр помощи »  Помошь с wav файлом » Дек. 3, 2013 07:16:24

помогите пожалуйста.
не понимаю как делать сделал нарезку, но в отдельные файлы. а нужно склеить в один

задачка для реализации на питоне будет такая
Аргументы скрипта: Путь к входной директории, путь к директории с результатом
Задача скрипта: Нарезать все wav из входной директории в соответствии с информацией указанной в файле lab. Имена wav и lab файлов совпадают.
Описание:
Каждому файлу wav соответствует файл lab. В файле lab в текстовом виде записана информация о границах нарезки.
пример lab,
36000000 45400000 1
45400000 148200000 2
148200000 155100000 1
155100000 213000000 2
222500000 242800000 2
242800000 254200000 1
254200000 278500000 2
первое число это начало фрагмента, второе число это конец фрагмента, далее “текст” фрагмента.
Необходимо разрезать wav по границам фрагментов и потом склеить все фрагменты с текстом 1 в один файл и все фрагменты с текстом 2 в другой файл. Фрагменты из разных wav не перемешивать.
В результате для каждого исходного имя.wav должны появиться в директории с результатом два файла имя_SD_1.wav и имя_SD_2.wav
вот что я на данный момент реализовал:
import math
import pyaudio
import wave
myfile = open(r"C:\Users\kulikov_aa\test.txt")
i=0
for line in myfile.readlines():
    wf = wave.open( r"C:\Users\kulikov_aa\test.wav", 'rb')
    i+=1;
    length=line.__len__();#the length by line
    one= line.find(' ')
    firstFragment="";
    firstFragment=line[0:one]#first fragment
    two=firstFragment.__len__()#the lenght of fragment
    firstontwo=line[two+1:length];#one step for two fragment
    three=firstontwo.find(' ');
    twoFragment=firstontwo[0:three];#two fragment
    four=twoFragment.__len__()
    five=firstontwo[four:length]#three fragment
    if int(five)==1:
        WAVE_OUTPUT_FILENAME = r"C:\Users\kulikov_aa\testA"+str(i)+".wav"
        p = pyaudio.PyAudio()
        print firstFragment+" "+twoFragment;
        start = float(firstFragment)*(math.pow(10,-7))
        end = float(twoFragment)*(math.pow(10,-7))
        frameRate = wf.getframerate()
        nChannels = wf.getnchannels()
        sampWidth = wf.getsampwidth()
        wf.setpos(start*frameRate)
        data = wf.readframes(int((end-start)*frameRate))
        wf3 = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
        wf3.setnchannels(nChannels)
        wf3.setsampwidth(sampWidth)
        wf3.setframerate(frameRate)
        wf3.writeframes(data)
        wf3.close()
        p.terminate()

GUI » pygobject threads » Дек. 1, 2013 14:44:30

наткнулся на нерабочий пример привел его к условно рабочему, посему пару вопросов:
почему поток не прерывается в этом участке самостоятельно:
    Gdk.threads_init()
    win = MainWnd()
    Gtk.main()
    Gdk.threads_leave()