pyqt5即兴
发表于 : 2018-09-26 19:05
昨天偶而搜了一下两个绑定项目pygtk,pyqt5,发现pygtk已经6年多没有更新,而pyqt5则已经成熟到在Ubuntu18.04下一条单一命令搭建环境的程度,十分惊叹,就测试了一下,拿出来共享,大虾们就见谅一下,小白们不妨尝试一下——图形编程的简单一至于斯!
一、安装pyqt5环境
sudo apt-get install python3-pyqt5
第一个小程序:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QLabel,QApplication
if __name__=='__main__':
app=QApplication(sys.argv)
w=QLabel()
w.setText("Hello,PYQT5!")
w.setFixedSize(402,332)
w.move(400,200)
w.show()
sys.exit(app.exec_())
保存为
hello.py
运行
python3 hello.py
注意运行python hello.py会出错,因为python2与3不匹配
第二个小程序
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets,QtCore
if __name__=='__main__':
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
widget.resize(360,360)
widget.setWindowTitle("Hello,PyQt5!")
widget.show()
sys.exit(app.exec_())
保存为
hello1.py
运行
python3 hello1.py
二、结合用qt-designer设计窗体
https://www.cnblogs.com/jmlovepython/p/5699791.html
我们通过新立得或命令安装designer
安装qt5 designer:
https://blog.csdn.net/lightningqw/artic ... s/79113335
需要先安装qt5和qt工具:
sudo apt-get install qt5-default qttools5-dev-tools
然后在终端执行designer就可以打开qt designer界面。
通过这个软件设计窗体完成后,会保存为ui文件。
三、转化窗体文件为py文件
命令为
pyuic5
转换文件命令把WindowEx.ui生成WindowEx.py:
pyuic5 -o WindowEx.py WindowEx.ui
查看一下新生成的windowEx.py:
打开该文本文件,可以看到其中自动生成一个class类Ui_MainWindow,类中有一个方法setupUi()
***不同的ui,生成的类可能不同
要使用这个现成的界面文件,可以创建一个python文件,导入windowEx.py
参考代码如下:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets #导入相应的包
from WindowEx import *
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
ui=Ui_MainWindow()
ui.setupUi(w)
w.show()
sys.exit( app.exec_() )
调试
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 13, in <module>
ui=Ui_Form()
NameError: name 'Ui_Form' is not defined
***此处类为Ui_MainWindow故出错
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 14, in <module>
ui.setupUi(w)
File "~/prj/WindowEx.py", line 42, in setupUi
MainWindow.setCentralWidget(self.centralwidget)
AttributeError: 'QWidget' object has no attribute 'setCentralWidget'
***这是由于qt designer生成的属性与qt5不匹配造成的,删除该行即可
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 14, in <module>
ui.setupUi(w)
File "~/prj/WindowEx.py", line 45, in setupUi
MainWindow.setMenuBar(self.menubar)
AttributeError: 'QWidget' object has no attribute 'setMenuBar'
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 14, in <module>
ui.setupUi(w)
File "~/prj/WindowEx.py", line 47, in setupUi
MainWindow.setStatusBar(self.statusbar)
AttributeError: 'QWidget' object has no attribute 'setStatusBar'
***这是由于qt designer生成的属性与qt5不匹配造成的,删除该行即可
$ python3 winEx.py
文件生成界面见附图,可以用designer设计出更复杂的界面,同样使用以上代码调用。
下面为WindowEx.py参考代码:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'WindowEx.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(140, 70, 184, 164))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.radioButton = QtWidgets.QRadioButton(self.verticalLayoutWidget)
self.radioButton.setObjectName("radioButton")
self.verticalLayout.addWidget(self.radioButton, 0, QtCore.Qt.AlignHCenter)
self.radioButton_2 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
self.radioButton_2.setObjectName("radioButton_2")
self.verticalLayout.addWidget(self.radioButton_2, 0, QtCore.Qt.AlignHCenter)
self.radioButton_3 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
self.radioButton_3.setObjectName("radioButton_3")
self.verticalLayout.addWidget(self.radioButton_3, 0, QtCore.Qt.AlignHCenter)
self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.verticalLayoutWidget)
self.dateTimeEdit.setObjectName("dateTimeEdit")
self.verticalLayout.addWidget(self.dateTimeEdit)
self.buttonBox = QtWidgets.QDialogButtonBox(self.verticalLayoutWidget)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.verticalLayout.addWidget(self.buttonBox)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 28))
self.menubar.setObjectName("menubar")
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.radioButton.setText(_translate("MainWindow", "一般"))
self.radioButton_2.setText(_translate("MainWindow", "讨厌"))
self.radioButton_3.setText(_translate("MainWindow", "喜欢"))
一、安装pyqt5环境
sudo apt-get install python3-pyqt5
第一个小程序:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QLabel,QApplication
if __name__=='__main__':
app=QApplication(sys.argv)
w=QLabel()
w.setText("Hello,PYQT5!")
w.setFixedSize(402,332)
w.move(400,200)
w.show()
sys.exit(app.exec_())
保存为
hello.py
运行
python3 hello.py
注意运行python hello.py会出错,因为python2与3不匹配
第二个小程序
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets,QtCore
if __name__=='__main__':
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
widget.resize(360,360)
widget.setWindowTitle("Hello,PyQt5!")
widget.show()
sys.exit(app.exec_())
保存为
hello1.py
运行
python3 hello1.py
二、结合用qt-designer设计窗体
https://www.cnblogs.com/jmlovepython/p/5699791.html
我们通过新立得或命令安装designer
安装qt5 designer:
https://blog.csdn.net/lightningqw/artic ... s/79113335
需要先安装qt5和qt工具:
sudo apt-get install qt5-default qttools5-dev-tools
然后在终端执行designer就可以打开qt designer界面。
通过这个软件设计窗体完成后,会保存为ui文件。
三、转化窗体文件为py文件
命令为
pyuic5
转换文件命令把WindowEx.ui生成WindowEx.py:
pyuic5 -o WindowEx.py WindowEx.ui
查看一下新生成的windowEx.py:
打开该文本文件,可以看到其中自动生成一个class类Ui_MainWindow,类中有一个方法setupUi()
***不同的ui,生成的类可能不同
要使用这个现成的界面文件,可以创建一个python文件,导入windowEx.py
参考代码如下:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets #导入相应的包
from WindowEx import *
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
ui=Ui_MainWindow()
ui.setupUi(w)
w.show()
sys.exit( app.exec_() )
调试
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 13, in <module>
ui=Ui_Form()
NameError: name 'Ui_Form' is not defined
***此处类为Ui_MainWindow故出错
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 14, in <module>
ui.setupUi(w)
File "~/prj/WindowEx.py", line 42, in setupUi
MainWindow.setCentralWidget(self.centralwidget)
AttributeError: 'QWidget' object has no attribute 'setCentralWidget'
***这是由于qt designer生成的属性与qt5不匹配造成的,删除该行即可
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 14, in <module>
ui.setupUi(w)
File "~/prj/WindowEx.py", line 45, in setupUi
MainWindow.setMenuBar(self.menubar)
AttributeError: 'QWidget' object has no attribute 'setMenuBar'
$ python3 winEx.py
Traceback (most recent call last):
File "winEx.py", line 14, in <module>
ui.setupUi(w)
File "~/prj/WindowEx.py", line 47, in setupUi
MainWindow.setStatusBar(self.statusbar)
AttributeError: 'QWidget' object has no attribute 'setStatusBar'
***这是由于qt designer生成的属性与qt5不匹配造成的,删除该行即可
$ python3 winEx.py
文件生成界面见附图,可以用designer设计出更复杂的界面,同样使用以上代码调用。
下面为WindowEx.py参考代码:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'WindowEx.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(140, 70, 184, 164))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.radioButton = QtWidgets.QRadioButton(self.verticalLayoutWidget)
self.radioButton.setObjectName("radioButton")
self.verticalLayout.addWidget(self.radioButton, 0, QtCore.Qt.AlignHCenter)
self.radioButton_2 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
self.radioButton_2.setObjectName("radioButton_2")
self.verticalLayout.addWidget(self.radioButton_2, 0, QtCore.Qt.AlignHCenter)
self.radioButton_3 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
self.radioButton_3.setObjectName("radioButton_3")
self.verticalLayout.addWidget(self.radioButton_3, 0, QtCore.Qt.AlignHCenter)
self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.verticalLayoutWidget)
self.dateTimeEdit.setObjectName("dateTimeEdit")
self.verticalLayout.addWidget(self.dateTimeEdit)
self.buttonBox = QtWidgets.QDialogButtonBox(self.verticalLayoutWidget)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.verticalLayout.addWidget(self.buttonBox)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 28))
self.menubar.setObjectName("menubar")
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.radioButton.setText(_translate("MainWindow", "一般"))
self.radioButton_2.setText(_translate("MainWindow", "讨厌"))
self.radioButton_3.setText(_translate("MainWindow", "喜欢"))