Найти - Пользователи
Полная версия: pyqt4 и правильное взаимодействие с ним
Начало » Python для новичков » pyqt4 и правильное взаимодействие с ним
1
HedgehogKS
Здравствуйте.
Ситуация такая: пытаюсь сделать чтото вроде окошка вывода в pyqt4, и управлять им из приложения, но ни каким образом не получается взаимодействовать с этим окном и изменять в нём информацию. Код следующий:

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        ...
        self.textEdit = QtGui.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(-2, -4, 362, 490))
        ...
    def setText(self, string):
        self.textEdit.setText(string)
class MyWidget (QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self,parent=None,selected=[],flag=0,*args):
        QtGui.QWidget.__init__(self,parent,*args)
        self.setupUi(self)
app = QtGui.QApplication(sys.argv)
widget = MyWidget(None)
widget.setText("SomeString1") 
widget.show()
time.sleep(2)
widget.setText("SomeString2") 
time.sleep(2)
widget.setText("SomeString3") 
sys.exit(app.exec_())
widget.setText("SomeString4")

widget.show() выполнен, и создаётся впечатление, что я сначала должен увидеть надпись “SomeString1”, через 2 секунды “SomeString2”, еще через 2 секунды “SomeString3”, но этого не происходит. Попытка выводить текст после команды “sys.exit(app.exec_())” также ни к чему не приводит, т.к. выполнение приложения останавливается на этой команде до закрытия окна.
Я также попробовал запустить окно отдельным потоком, но pyqt не даёт этого сделать.
Как же правильно организовать подобную работу окна, чтобы можно было изменять его содержимое из программы?

Используется pyqt4 и python27.
doza_and
проблема в том что консольные и GUI приложения работают совсем по разному.
консольные выполняются подряд и показывают данные если их попросишь тоже подряд.
GUI выполняют все подряд в тот момент когда пытаются сконфигурирваться и НИЧЕГО не показывают.
А дальше они что-то делают только в ответ на возникновение событий, которые обрабатываются в цикле обработки сообщений( app.exec_()), таких как сигналы таймера, нажатие на кнопки на клавиатуре и т.п.
Поэтому чтобы вы ни делали ни до ни после app.exec_() вы ничего не увидите. Надо делать в нем.
HedgehogKS
Не совсем тогда понимаю, как правильно организовать работу, допустим, простейшего irc клиента.
Организован цикл, периодически приходят сообщения, и я хочу выводить их в своё, оформленное определенным образом окно. Я мало знаком с питоном, что бы вы посоветовали использовать в данном случае?
py.user.next
from PyQt4 import QtGui, QtCore
 
class Window(QtGui.QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        self.textEdit = QtGui.QTextEdit(self)
        self.setCentralWidget(self.textEdit)
        
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.printText)
        self.timer.start(1000)
        
        self.ticks = 0
        
        self.setGeometry(500, 500, 250, 150)
        self.setWindowTitle('TextEdit + Timer')
        self.show()
    
    def printText(self):
        
        curText = self.textEdit.toPlainText()
        if self.ticks < 5:
            if curText:
                self.textEdit.setText(curText + ' a')
            else:
                self.textEdit.setText('a')
            self.ticks += 1
        else:
            self.textEdit.setText(curText + '\nok')
            self.timer.stop()
 
def f():
    app = QtGui.QApplication([])
    win = Window()
    app.exec_()
 
f()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB