pyqt中的Hello世界?

时间:2014-02-03 21:53:27

标签: python pyqt qt-designer

目前我正在使用pycharm开发python web应用程序。我想用QT框架开发桌面应用程序。我已经安装了pyqt。我在pyqt中搜索了hello world并找到了这个:

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.button = QtGui.QPushButton('Test', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.button)

    def handleButton(self):
        print ('Hello World')

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

但我不知道在哪里放这个代码? 这是我的pyqt设计师看起来像:
enter image description here

是否可以告诉我在哪里编写代码以及如何处理按钮点击?

1 个答案:

答案 0 :(得分:6)

您发布的代码似乎是从我的this answer复制的。该代码是一个简单的手写示例,完全不涉及使用Qt Designer。

使用Qt Designer的“Hello World”示例将从ui文件开始,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Window</class>
 <widget class="QWidget" name="Window">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>171</width>
    <height>61</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Hello World</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
   <item>
    <widget class="QPushButton" name="button">
     <property name="text">
      <string>Test</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

此文件可以保存为helloworld.ui并在Qt Designer中打开。

首先要了解Qt Designer,它不是一个IDE - 它只用于设计GUI,而不是主程序逻辑。程序逻辑是单独编写的,然后连接到GUI。

有两种方法可以做到这一点。第一种是使用uic module

直接加载ui文件
import sys, os
from PyQt4 import QtGui, QtCore, uic

DIRPATH = os.path.join(os.path.dirname(os.path.abspath(__file__)))

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        uic.loadUi(os.path.join(DIRPATH, 'helloworld.ui'), self)
        self.button.clicked.connect(self.handleButton)

    def handleButton(self):
        print('Hello World')

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

这将GUI注入到本地Window类中,该类是与Qt Designer中的顶级GUI类匹配的子类(在本例中也称为“Window”,但可以是您喜欢的任何内容) 。其他GUI小部件成为子类的属性 - 因此QPushButton可用作self.button

将GUI与程序逻辑连接起来的另一种方法是使用pyuic toolui文件生成python模块:

pyuic4 --output=helloworld.py helloworld.ui

然后可以导入主应用程序:

import sys
from PyQt4 import QtGui, QtCore
from helloworld import Ui_Window

class Window(QtGui.QWidget, Ui_Window):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)
        self.button.clicked.connect(self.handleButton)

    def handleButton(self):
        print('Hello World')

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

setupUi方法继承自生成的Ui_Window类,与uic.loadUi完全相同。