Форум сайта python.su
0
Здравствуйте.
Ситуация такая: пытаюсь сделать чтото вроде окошка вывода в 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")
Отредактировано HedgehogKS (Март 9, 2014 13:27:11)
Офлайн
253
проблема в том что консольные и GUI приложения работают совсем по разному.
консольные выполняются подряд и показывают данные если их попросишь тоже подряд.
GUI выполняют все подряд в тот момент когда пытаются сконфигурирваться и НИЧЕГО не показывают.
А дальше они что-то делают только в ответ на возникновение событий, которые обрабатываются в цикле обработки сообщений( app.exec_()), таких как сигналы таймера, нажатие на кнопки на клавиатуре и т.п.
Поэтому чтобы вы ни делали ни до ни после app.exec_() вы ничего не увидите. Надо делать в нем.
Офлайн
0
Не совсем тогда понимаю, как правильно организовать работу, допустим, простейшего irc клиента.
Организован цикл, периодически приходят сообщения, и я хочу выводить их в своё, оформленное определенным образом окно. Я мало знаком с питоном, что бы вы посоветовали использовать в данном случае?
Офлайн
857
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()
Отредактировано py.user.next (Март 9, 2014 20:59:48)
Офлайн