Ох, я определенно рекомендую PyQt4 .Сначала я не воспринимал всю эту ерунду SIGNAL
и EMIT
, но теперь, когда я создал программу с ней, модуль QThread
невероятно полезен.
Что касается стабильности, у меня никогда не было сбоев, никогда.Даже когда я отлаживал полуфункциональный код, у QT не было никаких проблем.Он просто выдавал ошибку в окне консоли всякий раз, когда я нажимал кнопку с недопустимым сигнальным слотом.
GTK, с другой стороны, просто «время от времени» всплывал без каких-либо ошибок.Просто ваш чрезвычайно информативный и дружелюбный Segmentation Fault
.Это было одной из причин, по которым я нахожу PyQt радостью для работы.Когда вы получаете сообщение об ошибке, вы на самом деле знаете, в чем дело.
Я почти уверен, что после этого это личное предпочтение, но еще один плюс - это выглядящие нативно графические интерфейсы на Mac, Linux и Windows.GTK + в Windows (не поймите меня неправильно. Я пользуюсь Ubuntu) просто вызывает ощущение X-org, что меня беспокоит.
Удачи!
Просто чтобы сделатьPyQt немного привлекательнее, вот выдержка из моего приложения для переплета книг (оно немного грязное):
class Binder(QtCore.QThread):
'''
Class for binding the actual book
'''
def __init__(self, parent = None):
super(Binder, self).__init__(parent)
def initialize(self, pages, options, outfile):
self.pages = pages
self.options = options
self.outFile = outfile
self.book = organizer.Book()
self.enc = Encoder(self.options)
self.ocr = ocr.OCR(self.options)
self.connect(self.enc, QtCore.SIGNAL('updateProgress(int, int)'), self.updateProgress)
def updateProgress(self, percent, item):
self.emit(QtCore.SIGNAL('updateProgress(int, QString)'), int(percent), 'Binding the book...')
self.emit(QtCore.SIGNAL('updateBackground(int, QColor)'), int(item), QtGui.QColor(170, 255, 170, 120))
if int(percent) == 100:
time.sleep(0.5)
self.emit(QtCore.SIGNAL('finishedBinding'))
def run(self):
self.die = False
for page in self.pages:
self.add_file(page, 'page')
if not self.die:
self.analyze()
if not self.die:
self.book.get_dpi()
if self.options['ocr'] and not self.die:
self.get_ocr()
if not self.die:
self.enc.initialize(self.book, self.outFile)
self.enc.start()