├── README.md ├── 简介.txt ├── 123.png ├── exit.png ├── exit24.png ├── redrock.png ├── PyQt5study ├── 7.1 QCheckBox单选框 ├── 2_1一个简单的例子.py ├── 2_2设置图标程序 ├── 3.2状态栏 ├── 2.3显示提示信息.py ├── 5.3用esc键退出示例 ├── 2.4关闭窗口.py ├── 5.4发射信号 ├── 2.5消息窗口.py ├── 3.4工具栏程序.py ├── 3.3菜单栏.py ├── 2_6将窗口放在屏幕中心.py ├── 4.2box布局 ├── 5.2信号槽 ├── 4.3.1网格布局 ├── 4.3.2网格布局 ├── 6.1 QInputDialog输入对话框 ├── 3.5一个综合的例子.py ├── 6.3QFontDialog字体对话框 ├── 4.1绝对定位方式.py ├── 6.4 QFileDialog文件对话框 └── 6.2 QColorDialog颜色对话框 ├── PyQt5中的事件和信号2.py ├── PyQt5中的事件和信号1.py ├── PyQt5中的事件和信号4.py ├── Qt5的各个模块的作用 ├── PyQt5教程之组件1字体选择对话框.py ├── PyQt5中的事件和信号3.py ├── PyQt5教程之组件3单行文本编辑框.py ├── PyQt5教程之组件3像素图.py ├── PyQt5教程之组件1输入对话框.py ├── PyQt5教程之组件2日历组件.py ├── PyQt5教程之组件2复选框.py ├── PyQt5教程之组件1颜色选择对话框.py ├── PyQt5教程之组件3下拉列表框.py ├── PyQt5教程之组件2滑块条.py ├── PyQt5教程之组件3分割框.py ├── PyQt5教程之组件1文件对话框.py ├── PyQt5教程之组件2进度条.py ├── PyQt5教程之组件2切换按钮.py ├── PyQt5教程之基础组件.py └── PyQt5教程之布局.py /README.md: -------------------------------------------------------------------------------- 1 | # PyQt5- 2 | GUI 3 | 我学习的PyQt的的的的过程 4 | -------------------------------------------------------------------------------- /简介.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/helloworldzhj/PyQt5/HEAD/简介.txt -------------------------------------------------------------------------------- /123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/helloworldzhj/PyQt5/HEAD/123.png -------------------------------------------------------------------------------- /exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/helloworldzhj/PyQt5/HEAD/exit.png -------------------------------------------------------------------------------- /exit24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/helloworldzhj/PyQt5/HEAD/exit24.png -------------------------------------------------------------------------------- /redrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/helloworldzhj/PyQt5/HEAD/redrock.png -------------------------------------------------------------------------------- /PyQt5study/7.1 QCheckBox单选框: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """单选框示例""" 3 | import sys 4 | from PyQt5 import QtWidgets, QtCore 5 | 6 | class CheckBox(QtWidgets.QWidget): 7 | def __init__(self): 8 | super(CheckBox,self).__init__() 9 | -------------------------------------------------------------------------------- /PyQt5study/2_1一个简单的例子.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """第一个程序""" 3 | import sys 4 | from PyQt5 import QtWidgets,QtGui 5 | 6 | app = QtWidgets.QApplication(sys.argv) 7 | first_window = QtWidgets.QWidget() 8 | first_window.resize(400,300) 9 | first_window.setWindowTitle("我的第一个程序") 10 | first_window.show() 11 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/2_2设置图标程序: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """设置图标""" 3 | import sys 4 | from PyQt5 import QtWidgets,QtGui 5 | 6 | class Icon(QtWidgets.QWidget): 7 | def __init__(self,parent = None): 8 | QtWidgets.QWidget.__init__(self,parent) 9 | 10 | self.setGeometry(300,300,250,150) 11 | self.setWindowTitle("图标") 12 | self.setWindowIcon(QtGui.QIcon(r'sample.ico')) 13 | 14 | app = QtWidgets.QApplication(sys.argv) 15 | icon = Icon() 16 | icon.show() 17 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/3.2状态栏: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """用按钮关闭程序""" 3 | import sys 4 | from PyQt5 import QtWidgets, QtGui 5 | 6 | class MainWindow(QtWidgets.QMainWindow): 7 | def __init__(self): 8 | super(MainWindow,self).__init__() 9 | 10 | self.resize(250,150) 11 | self.setWindowTitle("状态栏程序示例") 12 | self.statusBar().showMessage("就绪") 13 | 14 | app = QtWidgets.QApplication(sys.argv) 15 | main_window = MainWindow() 16 | main_window.show() 17 | sys.exit(app.exec_()) 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /PyQt5study/2.3显示提示信息.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """显示悬停信息""" 3 | import sys 4 | from PyQt5 import QtWidgets, QtCore, QtGui 5 | 6 | 7 | class Tooltip(QtWidgets.QWidget): 8 | def __init__(self,parent=None): 9 | QtWidgets.QWidget.__init__(self,parent) 10 | 11 | self.setGeometry(835,465,250,150) 12 | self.setWindowTitle("提示信息") 13 | 14 | self.setToolTip("This is a QWidget widget") 15 | # QtWidgets.QToolTip.setFont(QtGui.QFont("Times", 10)) 16 | 17 | 18 | app = QtWidgets.QApplication(sys.argv) 19 | tooltip = Tooltip() 20 | tooltip.show() 21 | sys.exit(app.exec_()) 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /PyQt5study/5.3用esc键退出示例: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """用esc键退出示例""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets,QtCore 6 | 7 | class Escape(QtWidgets.QWidget): 8 | def __init__(self): 9 | super(Escape,self).__init__() 10 | 11 | self.setWindowTitle("用esc键退出示例") 12 | self.resize(250,150) 13 | 14 | def keyPressEvent(self,event): 15 | if event.key()==QtCore.QT.Key_Escape: 16 | self.close() 17 | #keypressevent事件处理方法 18 | 19 | app = QtWidgets.QApplication(sys.argv) 20 | escape = Escape() 21 | escape.show() 22 | sys.exit(app.exec_()) 23 | #当我们按下esc键,程序就会结束。 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /PyQt5study/2.4关闭窗口.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """用按钮关闭程序""" 3 | import sys 4 | from PyQt5 import QtWidgets, QtCore, QtGui 5 | 6 | class QuitButton(QtWidgets.QWidget): 7 | def __init__(self,parent=None): 8 | QtWidgets.QWidget.__init__(self,parent) 9 | self.setGeometry(300,300,250,150) 10 | self.setWindowTitle("我的关闭程序") 11 | quit_button = QtWidgets.QPushButton("关闭",self) 12 | quit_button.setGeometry(60,60,60,35) 13 | 14 | quit_button.clicked.connect(QtWidgets.qApp.quit) 15 | 16 | app = QtWidgets.QApplication(sys.argv) 17 | quitbutton = QuitButton() 18 | quitbutton.show() 19 | sys.exit(app.exec_()) 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /PyQt5study/5.4发射信号: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """发射信号示例""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets,QtCore 6 | 7 | class EmitSignal(QtWidgets.QWidget): 8 | closeEmitApp = QtCore.pyqtSignal() 9 | #我们常见一个叫做closeEmitApp()的新信号。在鼠标按下时产生。 10 | 11 | def __init__(self): 12 | super(EmitSignal,self).__init__() 13 | 14 | self.setWindowTitle("发射信号演示程序") 15 | self.resize(250,150) 16 | 17 | self.closeEmitApp.connect(self.close) 18 | #吧自定义的信号closeEmitApp()与槽函数close()连接起来 19 | 20 | def mousePressEvent(self,QMouseEvent): 21 | self.closeEmitApp.emit() 22 | #通过信号变量的emit()方法来发射一个信号 23 | 24 | app = QtWidgets.QApplication(sys.argv) 25 | es = EmitSignal() 26 | es.show() 27 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/2.5消息窗口.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """用按钮关闭程序""" 3 | import sys 4 | from PyQt5 import QtWidgets, QtCore, QtGui 5 | 6 | 7 | class MessageBox(QtWidgets.QWidget): 8 | def __init__(self,parent=None): 9 | QtWidgets.QWidget.__init__(self,parent) 10 | self.setGeometry(300,300,250,150) 11 | self.setWindowTitle("消息窗口演示程序") 12 | 13 | def closeEvent(self,event): 14 | reply = QtWidgets.QMessageBox.question(self,'确认退出?','你确定要退出吗?', 15 | QtWidgets.QMessageBox.Yes, 16 | QtWidgets.QMessageBox.No) 17 | if reply == QtWidgets.QMessageBox.Yes: 18 | event.accept() 19 | else: 20 | event.ignore() 21 | 22 | app = QtWidgets.QApplication(sys.argv) 23 | qb = MessageBox() 24 | qb.show() 25 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/3.4工具栏程序.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """工具栏的使用""" 3 | import sys 4 | from PyQt5 import QtWidgets,QtGui 5 | 6 | class MainWindow(QtWidgets.QMainWindow): 7 | def __init__(self): 8 | super(MainWindow,self).__init__() 9 | 10 | self.resize(250,150) 11 | self.setWindowTitle("工具栏实例") 12 | 13 | self.exit_menu = QtWidgets.QAction(QtGui.QIcon(r"2.jpg"),"退出",self) 14 | self.exit_menu.setStatusTip("退出程序") 15 | self.exit_menu.setShortcut("Ctrl+Q") 16 | self.exit_menu.triggered.connect(QtWidgets.qApp.quit) 17 | 18 | self.toolbar = self.addToolBar("退出") 19 | self.toolbar.addAction(self.exit_menu) 20 | 21 | app = QtWidgets.QApplication(sys.argv) 22 | main_window = MainWindow() 23 | main_window.show() 24 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5中的事件和信号2.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | #重写事件处理函数 5 | import sys 6 | from PyQt5.QtCore import Qt 7 | from PyQt5.QtWidgets import QWidget, QApplication 8 | 9 | class Example(QWidget): 10 | 11 | def __init__(self): 12 | super().__init__() 13 | 14 | self.initUI() 15 | 16 | 17 | def initUI(self): 18 | 19 | self.setGeometry(300, 300, 250, 150) 20 | self.setWindowTitle('Event handler') 21 | self.show() 22 | 23 | 24 | def keyPressEvent(self, e): 25 | 26 | if e.key() == Qt.Key_Escape: 27 | self.close() 28 | #在这个例子中,我们重写了keypressevent事件处理函数 29 | #如果我们点了esc按钮,应用将会被终止 30 | 31 | 32 | if __name__ == '__main__': 33 | 34 | app = QApplication(sys.argv) 35 | ex = Example() 36 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/3.3菜单栏.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """菜单栏的使用""" 3 | import sys 4 | from PyQt5 import QtWidgets,QtGui 5 | 6 | class MainWindow(QtWidgets.QMainWindow): 7 | def __init__(self): 8 | super(MainWindow,self).__init__() 9 | 10 | self.resize(250,150) 11 | self.setWindowTitle("菜单栏实例") 12 | 13 | exit_menu = QtWidgets.QAction(QtGui.QIcon(r"1.ico"),"退出",self) 14 | exit_menu.setShortcut("Ctrl+Q") 15 | exit_menu.setStatusTip("退出程序") 16 | exit_menu.triggered.connect(QtWidgets.qApp.quit) 17 | 18 | self.statusBar() 19 | 20 | menubar = self.menuBar() 21 | file = menubar.addMenu("文件") 22 | file.addAction(exit_menu) 23 | 24 | app = QtWidgets.QApplication(sys.argv) 25 | mainwindow = MainWindow() 26 | mainwindow.show() 27 | sys.exit(app.exec_()) 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /PyQt5study/2_6将窗口放在屏幕中心.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """窗口放在屏幕中间""" 3 | import sys 4 | from PyQt5 import QtWidgets 5 | 6 | class Center(QtWidgets.QWidget): 7 | def __init__(self,parent=None): 8 | QtWidgets.QWidget.__init__(self,parent) 9 | self.setWindowTitle("窗口置中程序") 10 | self.resize(250,150) 11 | self.center() 12 | 13 | def center(self): 14 | screen = QtWidgets.QDesktopWidget().screenGeometry() 15 | size = self.geometry() 16 | self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2) 17 | 18 | app = QtWidgets.QApplication(sys.argv) 19 | center = Center() 20 | center.show() 21 | sys.exit(app.exec_()) 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /PyQt5study/4.2box布局: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """Box定位演示""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets 6 | 7 | class BoxLayout(QtWidgets.QWidget): 8 | def __init__(self): 9 | super(BoxLayout,self).__init__() 10 | 11 | self.setWindowTitle("Box定位演示程序") 12 | 13 | self.ok_button = QtWidgets.QPushButton("确定") 14 | self.cancel_button = QtWidgets.QPushButton("取消") 15 | 16 | self.h_box = QtWidgets.QHBoxLayout() 17 | self.h_box.addStretch(1) 18 | self.h_box.addWidget(self.ok_button) 19 | self.h_box.addWidget(self.cancel_button) 20 | 21 | self.v_box = QtWidgets.QVBoxLayout() 22 | self.v_box.addStretch(1) 23 | self.v_box.addLayout(self.h_box) 24 | 25 | self.setLayout(self.v_box) 26 | 27 | self.resize(300,150) 28 | 29 | app = QtWidgets.QApplication(sys.argv) 30 | box_layout = BoxLayout() 31 | box_layout.show() 32 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/5.2信号槽: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """信号槽示例""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets,QtCore 6 | 7 | class SignalSlot(QtWidgets.QWidget): 8 | def __init__(self): 9 | super(SignalSlot,self).__init__() 10 | 11 | self.setWindowTitle("信号槽演示程序") 12 | self.resize(250,150) 13 | 14 | lcd = QtWidgets.QLCDNumber(self) 15 | slider = QtWidgets.QSlider(QtCore.Qt.Horizontal,self) 16 | 17 | v_box = QtWidgets.QVBoxLayout() 18 | v_box.addWidget(lcd) 19 | v_box.addWidget(slider) 20 | 21 | self.setLayout(v_box) 22 | slider.valueChanged.connect(lcd.display) 23 | #我们将滑块的valueChanged信号连接到lcd的display槽函数上 24 | #emit.signal.connect(accept.slot) 25 | 26 | app = QtWidgets.QApplication(sys.argv) 27 | qb = SignalSlot() 28 | qb.show() 29 | sys.exit(app.exec_()) 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /PyQt5study/4.3.1网格布局: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """网格布局示例""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets 6 | 7 | class GridLayout(QtWidgets.QMainWindow): 8 | def __init__(self): 9 | super(GridLayout,self).__init__() 10 | 11 | self.setWindowTitle("网格布局演示程序") 12 | button_names = ['Cls','Bck','','Close', 13 | '7','8','9','/', 14 | '4','5','6','*', 15 | '1','2','3','-', 16 | '0','.','=','+'] 17 | main_ground = QtWidgets.QWidget() 18 | self.setCentralWidget(main_ground) 19 | grid = QtWidgets.QGridLayout() 20 | 21 | for[n,(x,y)]in enumerate([(i,j) for i in range(5) for j in range(4)]): 22 | if (x,y)==(0,2): 23 | grid.addWidget(QtWidgets.QLabel(button_names[n]),x,y) 24 | else: 25 | grid.addWidget(QtWidgets.QPushButton(button_names[n]),x,y) 26 | main_ground.setLayout(grid) 27 | 28 | app = QtWidgets.QApplication(sys.argv) 29 | grid_layout = GridLayout() 30 | grid_layout.show() 31 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/4.3.2网格布局: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """网格布局跨行示例""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets 6 | 7 | class GridLayout(QtWidgets.QMainWindow): 8 | def __init__(self): 9 | super(GridLayout,self).__init__() 10 | 11 | self.setWindowTitle("网格布局跨行演示程序") 12 | 13 | main_ground = QtWidgets.QWidget() 14 | self.setCentralWidget(main_ground) 15 | 16 | grid = QtWidgets.QGridLayout() 17 | grid.setSpacing(20) 18 | grid.addWidget(QtWidgets.QLabel("标题:"),1,0) 19 | grid.addWidget(QtWidgets.QLineEdit(),1,1) 20 | grid.addWidget(QtWidgets.QLabel("作者:"),2,0) 21 | grid.addWidget(QtWidgets.QLineEdit(),2,1) 22 | grid.addWidget(QtWidgets.QLabel("评论:"),3,0) 23 | grid.addWidget(QtWidgets.QTextEdit(),3,1,5,1) 24 | 25 | main_ground.setLayout(grid) 26 | self.resize(350,300) 27 | 28 | app = QtWidgets.QApplication(sys.argv) 29 | grid_layout = GridLayout() 30 | grid_layout.show() 31 | sys.exit(app.exec_()) 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /PyQt5中的事件和信号1.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | #信号 & 槽 5 | import sys 6 | from PyQt5.QtCore import Qt 7 | from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,QVBoxLayout, QApplication) 8 | #在这个例子中,我们显示了一个QtGui。QLCDNumber和一个QtGui.QSlider类,我们拖动滑块条的把手,lcd数字会变。 9 | 10 | class Example(QWidget): 11 | def __init__(self): 12 | super().__init__() 13 | 14 | self.initUI() 15 | def initUI(self): 16 | lcd = QLCDNumber(self) 17 | sld = QSlider(Qt.Horizontal,self) 18 | 19 | vbox = QVBoxLayout() 20 | vbox.addWidget(lcd) 21 | vbox.addWidget(sld) 22 | 23 | self.setLayout(vbox) 24 | sld.valueChanged.connect(lcd.display) 25 | #这里我们将滑块条的valuechange信号与ld数字显示的display槽连接在一起 26 | #发送者是一个发送了信号的对象,接受者是一个接受了信号的对象。槽是对信号做出反应的方法 27 | self.setGeometry(300,300,250,150) 28 | self.setWindowTitle('Signal & slot') 29 | self.show() 30 | 31 | if __name__ == '__main__': 32 | 33 | app = QApplication(sys.argv) 34 | ex = Example() 35 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5中的事件和信号4.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtCore import pyqtSignal, QObject 6 | from PyQt5.QtWidgets import QMainWindow, QApplication 7 | 8 | 9 | class Communicate(QObject): 10 | closeApp = pyqtSignal() 11 | #信号使用了pyqtSignal方法创建并且成为外部类Communicate类的属性 12 | 13 | class Example(QMainWindow): 14 | def __init__(self): 15 | super().__init__() 16 | self.initUI() 17 | 18 | def initUI(self): 19 | self.c = Communicate() 20 | self.c.closeApp.connect(self.close) 21 | #把自定义的closeApp信号连接到QMainWindow的close()槽上。 22 | 23 | self.setGeometry(300, 300, 290, 150) 24 | self.setWindowTitle('Emit signal') 25 | self.show() 26 | def mousePressEvent(self,event): 27 | self.c.closeApp.emit() 28 | #当我在窗口上点击一下鼠标,closeApp信号会被发射。应用中断。 29 | 30 | if __name__ == '__main__': 31 | 32 | app = QApplication(sys.argv) 33 | ex = Example() 34 | sys.exit(app.exec_()) 35 | 36 | #我们创建了一个新的信号叫做closeApp当触发鼠标点击事件时信号就会被发射。信号连接到了QMainWindow的close()方法。 -------------------------------------------------------------------------------- /Qt5的各个模块的作用: -------------------------------------------------------------------------------- 1 | QtCore 模块包含了非GUI的功能设计。这个模块被用来实现时间,文件和目录,不同数据类型,流,URL,mime类型,线程和进程。QtGui 模块包含的类用于窗口化的系统结构,事件处理,2D绘图,基本图形,字体和文本。 2 | QtWidgets 模块包含的类提供了一套UI元素来创建经典桌面风格用户界面。 3 | QtMultimedia 模块包含的类用于处理多媒体内容和链接摄像头和无线电功能的API。 4 | QtBluetooth 模块包含的类用于扫描蓝牙设备,并且和他们建立连接互动。QtNetwork 模块包含的类用于网络编程,这些类使TCP/IP和UDP客户端/服务端编程更加容易和轻便。 5 | QtPositioning 模块包含的类用于多种可获得资源的位置限定,包含卫星定位,Wi-Fi,或一个文本文件。Enginio 模块用于解决客户端访问Qt云服务托管。 6 | QtWebSockets 模块包含的类用于解决WebSocket通信协议。 7 | QtWebKit 包含的关于浏览器的类用于解决基于WebKit2的支持库。 8 | QtWebKitWidgets 模块包含的关于WebKit1的类基本解决浏览器使用基于QtWidgets应用问题。 9 | QtXml 模块包含的类用于解析XML文件。这个模块提供SAX和DOM API解决方法。 10 | QtSvg 模块提供类用于显示SVG文件内容。Scalable Vector Graphics (SVG) 是一种语言,用XML来描述二维图形和图形应用程序。 11 | QtSql模块提供类驱动数据库工作。 QtTest 模块包含了方法提供PyQt5应用的单元测试 12 | 13 | 14 | 15 | PyQt5不向后兼容PyQt4的;这是一些在PyQt5中的重要改变然而,将旧代码迁移到新的版本中并不是非常困难不同点如下: 16 | 1.Python 模块已经被改写. 一些模块被舍弃 (QtScript), 部分的模块被分割成子模块 (QtGui, QtWebKit). 17 | 2.新的模块被引进, 包含 QtBluetooth, QtPositioning, 和 Enginio. 18 | 3.PyQt5 只支持最新风格的信号和槽的写法. SIGNAL()和SLOT()的调用将不会被长时间支持. 19 | 4.PyQt5 不支持任何在Qt 5.0版本中弃用或取消的API. 20 | -------------------------------------------------------------------------------- /PyQt5study/6.1 QInputDialog输入对话框: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """输入对话框示例""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets,QtCore 6 | 7 | class InputDialog(QtWidgets.QWidget): 8 | def __init__(self): 9 | super(InputDialog,self).__init__() 10 | 11 | self.setWindowTitle("输入对话框演示程序") 12 | self.setGeometry(300,300,350,80) 13 | self.button = QtWidgets.QPushButton('对话框',self) 14 | self.button.setFocusPolicy(QtCore.Qt.NoFocus) 15 | self.button.move(20,20) 16 | self.button.clicked.connect(self.show_dialog) 17 | self.setFocus() 18 | 19 | self.label = QtWidgets.QLineEdit(self) 20 | self.label.move(130,20) 21 | 22 | def show_dialog(self): 23 | text,ok = QtWidgets.QInputDialog.getText(self,"输入对话框","请输入你的名字") 24 | #第一个参数对话框的标题 第二个参数 提示信息 25 | #该对话框返回用户输入的内容和一个布尔值 26 | #如果用户单击OK按钮确认输入,则返回的布尔值为true否则为false 27 | if ok: 28 | self.label.setText(text) 29 | 30 | 31 | app = QtWidgets.QApplication(sys.argv) 32 | input_dialog = InputDialog() 33 | input_dialog.show() 34 | sys.exit(app.exec_()) 35 | 36 | 37 | -------------------------------------------------------------------------------- /PyQt5study/3.5一个综合的例子.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """综合使用的程序""" 3 | import sys 4 | from PyQt5 import QtWidgets,QtGui 5 | 6 | class MainWindow(QtWidgets.QMainWindow): 7 | def __init__(self): 8 | super(MainWindow,self).__init__() 9 | 10 | self.resize(250,150) 11 | self.setWindowTitle("我的程序") 12 | text_edit = QtWidgets.QTextEdit() 13 | self.setCentralWidget(text_edit) 14 | 15 | exit_action = QtWidgets.QAction(QtGui.QIcon(r"sample.png"),"退出",self) 16 | exit_action.setShortcut("Ctrl+Q") 17 | exit_action.setStatusTip("退出程序") 18 | exit_action.triggered.connect(QtWidgets.qApp.quit) 19 | 20 | self.statusBar() 21 | 22 | self.menu_bar = self.menuBar() 23 | file = self.menu_bar.addMenu("文件") 24 | file.addAction(exit_action) 25 | 26 | self.toolbar = self.addToolBar("退出") 27 | self.toolbar.addAction(exit_action) 28 | 29 | app = QtWidgets.QApplication(sys.argv) 30 | main_window = MainWindow() 31 | main_window.show() 32 | sys.exit(app.exec_()) 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /PyQt5教程之组件1字体选择对话框.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import * 6 | 7 | class Example(QWidget): 8 | def __init__(self): 9 | super().__init__() 10 | self.initUI() 11 | def initUI(self): 12 | vbox = QVBoxLayout() 13 | btn = QPushButton('Dialog', self) 14 | btn.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed) 15 | btn.move(20, 20) 16 | vbox.addWidget(btn) 17 | btn.clicked.connect(self.showDialog) 18 | self.lbl = QLabel('Knowledge only matters', self) 19 | self.lbl.move(130, 20) 20 | vbox.addWidget(self.lbl) 21 | self.setLayout(vbox) 22 | self.setGeometry(300, 300, 250, 180) 23 | self.setWindowTitle('Font dialog') 24 | self.show() 25 | def showDialog(self): 26 | font, ok = QFontDialog.getFont() 27 | #在这儿弹出一个字体对话框。getFont方法返回字体名字和布尔值,如果用户点击了ok,布尔值为true;否则为false。 28 | if ok: 29 | self.lbl.setFont(font) 30 | #如果点击了OK按钮,标签字体会改变。 31 | 32 | if __name__ == '__main__': 33 | app = QApplication(sys.argv) 34 | ex = Example() 35 | sys.exit(app.exec_()) 36 | #在这个例子中,我们有一个按钮和一个标签。通过字体选择对话框,我们可以改变标签内容的字体 -------------------------------------------------------------------------------- /PyQt5中的事件和信号3.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | #事件发送者 5 | import sys 6 | from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication 7 | 8 | class Example(QMainWindow): 9 | def __init__(self): 10 | super().__init__() 11 | self.initUI() 12 | 13 | def initUI(self): 14 | btn1=QPushButton('Button 1',self) 15 | btn1.move(30,50) 16 | 17 | btn2=QPushButton('Button 2',self) 18 | btn2.move(150,50) 19 | 20 | btn1.clicked.connect(self.buttonClicked) 21 | btn2.clicked.connect(self.buttonClicked) 22 | #在这个例子中,我们有两个按钮,在click()方法中,我们调用sender()方法来判断哪一个按钮是我们按下的. 23 | #两个按钮连接到同一个槽中。 24 | 25 | self.statusBar() 26 | 27 | 28 | self.setGeometry(300,300,290,150) 29 | self.setWindowTitle('event sender') 30 | self.show() 31 | 32 | def buttonClicked(self): 33 | sender = self.sender() 34 | self.statusBar().showMessage(sender.text()+' was pressed') 35 | #我们调用sender方法判断发送信号的信号源是哪一个。然后在应用的状态栏上显示被按下的按钮的标签内容。 36 | 37 | if __name__ == '__main__': 38 | 39 | app = QApplication(sys.argv) 40 | ex = Example() 41 | sys.exit(app.exec_()) 42 | -------------------------------------------------------------------------------- /PyQt5教程之组件3单行文本编辑框.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import (QWidget, QLabel, 6 | QLineEdit, QApplication) 7 | 8 | 9 | class Example(QWidget): 10 | def __init__(self): 11 | super().__init__() 12 | self.initUI() 13 | def initUI(self): 14 | self.lbl = QLabel(self) 15 | qle = QLineEdit(self) 16 | #创建单行文本编辑框(QLineEdit)组件。 17 | qle.move(60, 100) 18 | self.lbl.move(60, 40) 19 | 20 | qle.textChanged[str].connect(self.onChanged) 21 | #如果单行文本编辑框框内文本被改变,调用onChanged()方法。 22 | 23 | self.setGeometry(300, 300, 280, 170) 24 | self.setWindowTitle('QLineEdit') 25 | self.show() 26 | def onChanged(self, text): 27 | self.lbl.setText(text) 28 | self.lbl.adjustSize() 29 | #上面是onChanged()方法的实现,我们设置了标签的显示文本。我们调用了adjustSize()方法来调整标签相对于显示的文本的长度。 30 | 31 | if __name__ == '__main__': 32 | app = QApplication(sys.argv) 33 | ex = Example() 34 | sys.exit(app.exec_()) 35 | #这个例子显示了一个单行编辑文本框和一个标签。我们在单行文本编辑框中输入文本时会同步把文本显示在标签中。 -------------------------------------------------------------------------------- /PyQt5教程之组件3像素图.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | import os 6 | from PyQt5.QtWidgets import * 7 | from PyQt5.QtGui import QPixmap 8 | 9 | os.chdir('C:/Users/Administrator/AppData/Local/Programs/Python/Python35-32/0/PyQt5教程_博客园') 10 | 11 | class Example(QWidget): 12 | 13 | def __init__(self): 14 | super().__init__() 15 | self.initUI() 16 | def initUI(self): 17 | hbox = QHBoxLayout(self) 18 | pixmap = QPixmap("redrock.png") 19 | #创建QPixmap对象。该对象构造方法传入一个文件的名字作为参数。 20 | 21 | lbl = QLabel(self) 22 | lbl.setPixmap(pixmap) 23 | #把像素图对象设置给标签,从而通过标签来显示像素图。 24 | 25 | hbox.addWidget(lbl) 26 | self.setLayout(hbox) 27 | 28 | self.move(300, 200) 29 | self.setWindowTitle('Red Rock') 30 | self.show() 31 | #运行这个例子,我们会把一个图片显示在窗口上。 32 | 33 | if __name__ == '__main__': 34 | 35 | app = QApplication(sys.argv) 36 | ex = Example() 37 | sys.exit(app.exec_()) 38 | #运行这个例子,我们会把一个图片显示在窗口上。 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /PyQt5教程之组件1输入对话框.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | '''对话框窗口或对话框是大多数主流GUI应用不可缺少的部分。对话是两个或更多人之间的会话。在计算机应用中,对话框是一个用来和应用对话的窗口。对话框可以用来输入数据,修改数据,改变应用设置等等。''' 5 | 6 | import sys 7 | from PyQt5.QtWidgets import * 8 | 9 | class Example(QWidget): 10 | def __init__(self): 11 | super().__init__() 12 | self.initUI() 13 | def initUI(self): 14 | self.btn = QPushButton('dialog',self) 15 | self.btn.move(20,20) 16 | self.btn.clicked.connect(self.showDialog) 17 | #一个按钮,一个单行编辑框组件。按下按钮会显示输入对话框,用于获得一个字符串值 18 | 19 | self.le = QLineEdit(self) 20 | self.le.move(130,22) 21 | 22 | self.setGeometry(300,300,290,150) 23 | self.setWindowTitle('Input Dialog') 24 | self.show() 25 | def showDialog(self): 26 | text,ok = QInputDialog.getText(self,'Input Dialog','Enter your name:') 27 | #第一个字符串参数是对话框的标题,第二个字符串参数是对话框内的消息文本。对话框返回输入的文本内容和一个布尔值。如果我们点击了Ok按钮,布尔值就是true,反之布尔值是false(译者注:也只有按下Ok按钮时,返回的文本内容才会有值)。 28 | if ok: 29 | self.le.setText(str(text)) 30 | #把我们从对话框接收到的文本设置到单行编辑框组件上显示。 31 | #在对话框中输入的值会在单行文本框中显示 32 | 33 | if __name__=='__main__': 34 | app = QApplication(sys.argv) 35 | ex = Example() 36 | sys.exit(app.exec_()) 37 | -------------------------------------------------------------------------------- /PyQt5教程之组件2日历组件.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import * 6 | from PyQt5.QtCore import QDate 7 | 8 | class Example(QWidget): 9 | def __init__(self): 10 | super().__init__() 11 | self.initUI() 12 | def initUI(self): 13 | cal = QCalendarWidget(self) 14 | #创建QCalendarWidget类。 15 | cal.setGridVisible(True) 16 | cal.move(20, 20) 17 | cal.clicked[QDate].connect(self.showDate) 18 | #如果我们在组件上选择了一个日期,clicked[QDate] 信号会被发射。我们把这个信号和自定义的showDate()方法连接。 19 | 20 | self.lbl = QLabel(self) 21 | date = cal.selectedDate() 22 | self.lbl.setText(date.toString()) 23 | self.lbl.move(130, 260) 24 | 25 | self.setGeometry(300, 300, 350, 300) 26 | self.setWindowTitle('Calendar') 27 | self.show() 28 | def showDate(self, date): 29 | self.lbl.setText(date.toString()) 30 | #我们通过selectedDate()方法检索被选中的日期。然后我们把选中的日期对象转化成字符串显示在标签组件上。 31 | if __name__ == '__main__': 32 | app = QApplication(sys.argv) 33 | ex = Example() 34 | sys.exit(app.exec_()) 35 | #这个例子展示了一个日历组件和标签组件。功能是日历中选择的日期会显示在标签组件中。 -------------------------------------------------------------------------------- /PyQt5教程之组件2复选框.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import * 6 | from PyQt5.QtCore import Qt 7 | 8 | class Example(QWidget): 9 | def __init__(self): 10 | super().__init__() 11 | self.initUI() 12 | 13 | def initUI(self): 14 | cb = QCheckBox('show title',self) 15 | #创建一个复选框,设置他的内容是showtitle 16 | cb.move(20,20) 17 | cb.toggle() 18 | #我们需要设置窗口标题,所以我们必须选中复选框。如果不选中,默认情况下复选框不会被选中所以窗口标题也不会被设置 19 | cb.stateChanged.connect(self.changeTitle) 20 | #将我们定义的changetitle()槽方法和statechanged信号连接。changetitle方法用于切换窗口标题。 21 | 22 | self.setGeometry(300,300,250,150) 23 | self.setWindowTitle('QCheckBox') 24 | self.show() 25 | 26 | def changeTitle(self,state): 27 | if state == Qt.Checked: 28 | self.setWindowTitle('QCheckBox') 29 | else: 30 | self.setWindowTitle(' ') 31 | #复选框组件的状态会传入changetitle方法的state参数。如果复选框被选中,我们设置窗口标题。否则我们把窗口标题设置成一个空字符串。 32 | 33 | if __name__ =='__main__': 34 | app = QApplication(sys.argv) 35 | ex = Example() 36 | sys.exit(app.exec_()) 37 | 38 | #在这个例子中我们使用复选框来切换标题 -------------------------------------------------------------------------------- /PyQt5教程之组件1颜色选择对话框.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from PyQt5.QtWidgets import (QWidget, QPushButton, QFrame, 3 | QColorDialog, QApplication) 4 | from PyQt5.QtGui import QColor 5 | 6 | class Example(QWidget): 7 | def __init__(self): 8 | super().__init__() 9 | 10 | self.initUI() 11 | def initUI(self): 12 | col = QColor(0, 0, 0) 13 | #初始化QtGuiQFrame组件的颜色。 14 | 15 | self.btn = QPushButton('Dialog', self) 16 | self.btn.move(20, 20) 17 | 18 | self.btn.clicked.connect(self.showDialog) 19 | self.frm = QFrame(self) 20 | self.frm.setStyleSheet("QWidget { background-color: %s }"% col.name()) 21 | self.frm.setGeometry(130, 22, 100, 100) 22 | 23 | self.setGeometry(300, 300, 250, 180) 24 | self.setWindowTitle('Color dialog') 25 | self.show() 26 | 27 | def showDialog(self): 28 | 29 | col = QColorDialog.getColor() 30 | #这一行弹出颜色选择框。 31 | 32 | if col.isValid(): 33 | self.frm.setStyleSheet("QWidget { background-color: %s }"% col.name()) 34 | #如果我们选中一个颜色并且点了OK按钮,会返回一个有效的颜色值。如果我们点击了cancel按钮,不会返回选中的值。我们使用样式表来定义背景颜色。 35 | 36 | if __name__ == '__main__': 37 | 38 | app = QApplication(sys.argv) 39 | ex = Example() 40 | sys.exit(app.exec_()) 41 | #例子中显示了一个按钮和一个Qframe。将QFrame组件的背景设置为黑色。使用颜色选择框类,我们可以改变它的颜色。 -------------------------------------------------------------------------------- /PyQt5study/6.3QFontDialog字体对话框: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """字体对话框示例""" 3 | import sys 4 | from PyQt5 import QtWidgets, QtCore 5 | 6 | class FontDialog(QtWidgets.QWidget): 7 | def __init__(self): 8 | super(FontDialog,self).__init__() 9 | 10 | self.setWindowTitle("字体对话框示例程序") 11 | self.setGeometry(300,300,250,110) 12 | 13 | self.button = QtWidgets.QPushButton("对话框",self) 14 | self.button.setFocusPolicy(QtCore.Qt.NoFocus) 15 | self.button.move(20,20) 16 | self.button.clicked.connect(self.show_dialog) 17 | 18 | self.label = QtWidgets.QLabel("普通的disco我们普通的摇",self) 19 | self.label.move(130,30) 20 | 21 | self.h_box = QtWidgets.QHBoxLayout() 22 | self.h_box.addWidget(self.button) 23 | self.h_box.addWidget(self.label,1) 24 | #将label标签加入到hbox布局中,并通过第二个参数1来设置label的大小是可变的。这个设置是必须的。这样的话太大的字就可以变化矿体的大小 25 | self.setLayout(self.h_box) 26 | 27 | def show_dialog(self): 28 | font,ok = QtWidgets.QFontDialog.getFont(self) 29 | #该语句弹出字体对话框 30 | if ok: 31 | self.label.setFont(font) 32 | #单击OK按钮后使用标签对象的setFont方法设置标签内容的字体 33 | 34 | 35 | app = QtWidgets.QApplication(sys.argv) 36 | fd = FontDialog() 37 | fd.show() 38 | sys.exit(app.exec_()) 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /PyQt5study/4.1绝对定位方式.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """绝对定位演示""" 3 | 4 | import sys 5 | from PyQt5 import QtWidgets,QtGui 6 | 7 | class MainWindow(QtWidgets.QMainWindow): 8 | def __init__(self): 9 | super(MainWindow,self).__init__() 10 | 11 | self.setWindowTitle("绝对定位演示程序") 12 | self.resize(250,150) 13 | QtWidgets.QLabel('Couldn\'t',self).move(15,10) 14 | QtWidgets.QLabel('care',self).move(35,40) 15 | QtWidgets.QLabel('less',self).move(55,60) 16 | QtWidgets.QLabel('and',self).move(115,60) 17 | QtWidgets.QLabel('then',self).move(135,40) 18 | QtWidgets.QLabel('me',self).move(115,20) 19 | QtWidgets.QLabel('help',self).move(145,10) 20 | QtWidgets.QLabel('nothing',self).move(215,10) 21 | 22 | app = QtWidgets.QApplication(sys.argv) 23 | main_window = MainWindow() 24 | main_window.show() 25 | sys.exit(app.exec_()) 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /PyQt5教程之组件3下拉列表框.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import (QWidget, QLabel, 6 | QComboBox, QApplication) 7 | 8 | 9 | class Example(QWidget): 10 | 11 | def __init__(self): 12 | super().__init__() 13 | 14 | self.initUI() 15 | 16 | 17 | def initUI(self): 18 | 19 | self.lbl = QLabel("Ubuntu", self) 20 | 21 | combo = QComboBox(self) 22 | combo.addItem("Ubuntu") 23 | combo.addItem("Mandriva") 24 | combo.addItem("Fedora") 25 | combo.addItem("Arch") 26 | combo.addItem("Gentoo") 27 | #创建一个下拉列表框并填充了五个列表项。 28 | 29 | combo.move(50, 50) 30 | self.lbl.move(50, 150) 31 | 32 | combo.activated[str].connect(self.onActivated) 33 | #一旦列表项被选中,会调用onActivated()方法。 34 | self.setGeometry(300, 300, 300, 200) 35 | self.setWindowTitle('QComboBox') 36 | self.show() 37 | 38 | 39 | def onActivated(self, text): 40 | 41 | self.lbl.setText(text) 42 | self.lbl.adjustSize() 43 | #上面的方法,我们把下拉列表框中选中的列表项的文本显示在标签组件上。并且根据标签文本调整了标签大小。 44 | 45 | 46 | if __name__ == '__main__': 47 | 48 | app = QApplication(sys.argv) 49 | ex = Example() 50 | sys.exit(app.exec_()) 51 | #在这个例子中显示了一个下拉列表框和一个标签。下拉列表框有五个列表项。这五个列表项都是Linux发行版的名字。标签组件显示在下拉列表框中选中的列表项的文本。 -------------------------------------------------------------------------------- /PyQt5study/6.4 QFileDialog文件对话框: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 文件对话框示例 """ 3 | import sys 4 | from PyQt5 import QtWidgets,QtCore,QtGui 5 | 6 | #在程序中显示了菜单栏 状态栏 和一个文本编辑器 7 | 8 | 9 | class OpenFileDialog(QtWidgets.QMainWindow): 10 | def __init__(self): 11 | super(OpenFileDialog,self).__init__() 12 | 13 | self.setWindowTitle("文件对话框演示程序") 14 | self.setGeometry(300,300,400,300) 15 | 16 | self.text_edit = QtWidgets.QTextEdit() 17 | self.setCentralWidget(self.text_edit) 18 | #示例程序基于QMainWindow窗口部件的,因为我们需要将文本编辑器设置为中心部件 19 | 20 | self.statusBar() 21 | self.setFocus() 22 | 23 | self.file_item = QtWidgets.QAction(QtGui.QIcon(r"gear_08.png"),"打开",self) 24 | self.file_item.setShortcut("Ctrl+0") 25 | self.file_item.setStatusTip("打开新文件") 26 | self.file_item.triggered.connect(self.show_dialog) 27 | 28 | self.file = self.menuBar().addMenu("文件") 29 | self.file.addAction(self.file_item) 30 | 31 | def show_dialog(self): 32 | file_name = QtWidgets.QFileDialog.getOpenFileName(self,'打开文件',r"C:\Users\Administrator\Desktop\test/") 33 | #该语句弹出文件对话框 34 | try: 35 | file = open(file_name[0],"r") 36 | data = file.read() 37 | except UnicodeDecodeError: 38 | data = "不合法的txt文件" 39 | except FileNotFoundError: 40 | data = "" 41 | self.text_edit.setText(data) 42 | #将读取被选择的文件并将其显示在文本编辑器中 43 | 44 | 45 | app = QtWidgets.QApplication(sys.argv) 46 | file_d = OpenFileDialog() 47 | file_d.show() 48 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /PyQt5study/6.2 QColorDialog颜色对话框: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """颜色对话框演示程序""" 3 | import sys 4 | from PyQt5 import QtWidgets,QtCore,QtGui 5 | 6 | 7 | class ColorDialog(QtWidgets.QWidget): 8 | def __init__(self): 9 | super(ColorDialog,self).__init__() 10 | 11 | self.setWindowTitle("颜色对话框演示程序") 12 | self.setGeometry(300,300,250,180) 13 | 14 | self.button = QtWidgets.QPushButton("更改颜色",self) 15 | self.button.setFocusPolicy(QtCore.Qt.NoFocus) 16 | #把按钮的焦点策略设定为nofocus,关于焦点简单介绍一下,在应用程序中都会有一个当前窗口,即当前获得焦点时间的窗口,这个窗口可以接受键盘的输入。 17 | self.button.move(20,20) 18 | 19 | self.button.clicked.connect(self.show_dialog) 20 | self.setFocus() 21 | #将当前窗口设置为焦点窗口,即设为选中状态 22 | 23 | color = QtGui.QColor(0,0,0) 24 | #用一个颜色存储一种颜色,这里用rgb颜色(0,0,0)代表黑色 25 | self.widget = QtWidgets.QWidget(self) 26 | self.widget.setStyleSheet("QWidget{background-color:%s}"% color.name()) 27 | #setStyleSheet方法用来设置图形界面的外观这里是将刚刚创建的widget不见得颜色设置为color存储的颜色也就是黑色,在下文中颜色当ok时就又改变了 28 | self.widget.setGeometry(130,22,100,100) 29 | 30 | def show_dialog(self): 31 | col = QtWidgets.QColorDialog.getColor() 32 | #这一行语句用来弹出颜色对话框 33 | if col.isValid(): 34 | self.widget.setStyleSheet("QWidget{background-color:%s}"% col.name()) 35 | #以上语句用来检测颜色是否可用如果用户单击取消按钮则对话框不返回任何可用的颜色。如果颜色可用,我们就使用stylesheets设置widget部件的背景色 36 | 37 | app = QtWidgets.QApplication(sys.argv) 38 | colordialog = ColorDialog() 39 | colordialog.show() 40 | sys.exit(app.exec_()) 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /PyQt5教程之组件2滑块条.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import * 6 | from PyQt5.QtCore import Qt 7 | from PyQt5.QtGui import QPixmap 8 | 9 | class Example(QWidget): 10 | 11 | def __init__(self): 12 | super().__init__() 13 | 14 | self.initUI() 15 | 16 | def initUI(self): 17 | sld = QSlider(Qt.Horizontal, self) 18 | #创建了一个横向的滑块条。 19 | sld.setFocusPolicy(Qt.NoFocus) 20 | sld.setGeometry(30, 40, 100, 30) 21 | sld.valueChanged[int].connect(self.changeValue) 22 | #我们把valuechange信号连接到我们自定义的changevalue()方法上 23 | 24 | self.label = QLabel(self) 25 | self.label.setPixmap(QPixmap('mute.png')) 26 | #我们创建了一个标签组件,并设置了一个初始的无声图片 27 | self.label.setGeometry(160, 40, 80, 30) 28 | 29 | self.setGeometry(300, 300, 280, 170) 30 | self.setWindowTitle('QSlider') 31 | self.show() 32 | 33 | 34 | def changeValue(self, value): 35 | 36 | if value == 0: 37 | self.label.setPixmap(QPixmap('mute.png')) 38 | elif value > 0 and value <= 30: 39 | self.label.setPixmap(QPixmap('min.png')) 40 | elif value > 30 and value < 80: 41 | self.label.setPixmap(QPixmap('med.png')) 42 | else: 43 | self.label.setPixmap(QPixmap('max.png')) 44 | #在这里我们实现了根据滑块条的值,我们设置不同的标签图片。在上面的代码中,如果滑块条的值等于0,我们为标签设置mute。png图片 45 | 46 | if __name__ == '__main__': 47 | 48 | app = QApplication(sys.argv) 49 | ex = Example() 50 | sys.exit(app.exec_()) 51 | 52 | #在这个例子中,我们创建了一个音量控制器。通过拖动滑块条的把手,我们可以改变标签的图像。 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /PyQt5教程之组件3分割框.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import * 6 | from PyQt5.QtCore import Qt 7 | 8 | 9 | class Example(QWidget): 10 | 11 | def __init__(self): 12 | super().__init__() 13 | 14 | self.initUI() 15 | 16 | 17 | def initUI(self): 18 | 19 | hbox = QHBoxLayout(self) 20 | 21 | topleft = QFrame(self) 22 | topleft.setFrameShape(QFrame.StyledPanel) 23 | #我们使用了一个样式框架,为了让框架组件之间的分割线看的明显。我们使用了一个样式框架,为了让框架组件之间的分割线看的明显。 24 | 25 | topright = QFrame(self) 26 | topright.setFrameShape(QFrame.StyledPanel) 27 | 28 | bottom = QFrame(self) 29 | bottom.setFrameShape(QFrame.StyledPanel) 30 | 31 | splitter1 = QSplitter(Qt.Horizontal) 32 | splitter1.addWidget(topleft) 33 | splitter1.addWidget(topright) 34 | #我们创建了一个分割框组件并且在这个分割框中添加进入两个框架组件。 35 | 36 | splitter2 = QSplitter(Qt.Vertical) 37 | splitter2.addWidget(splitter1) 38 | splitter2.addWidget(bottom) 39 | #我们把第一个分割框添加进另一个分割框组件中。 40 | 41 | hbox.addWidget(splitter2) 42 | self.setLayout(hbox) 43 | 44 | self.setGeometry(300, 300, 300, 200) 45 | self.setWindowTitle('QSplitter') 46 | self.show() 47 | 48 | 49 | def onChanged(self, text): 50 | 51 | self.lbl.setText(text) 52 | self.lbl.adjustSize() 53 | 54 | 55 | if __name__ == '__main__': 56 | 57 | app = QApplication(sys.argv) 58 | ex = Example() 59 | sys.exit(app.exec_()) 60 | #在这个例子中,我们有三个框架组件和两个分割框组件。注意在某些主题下,分割框组件可能不会被显示。 -------------------------------------------------------------------------------- /PyQt5教程之组件1文件对话框.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | import os 6 | from PyQt5.QtWidgets import (QMainWindow, QTextEdit, 7 | QAction, QFileDialog, QApplication) 8 | from PyQt5.QtGui import QIcon 9 | 10 | os.chdir('C:/Users/Administrator/AppData/Local/Programs/Python/Python35-32/0/PyQt5教程_博客园') 11 | 12 | class Example(QMainWindow): 13 | def __init__(self): 14 | super().__init__() 15 | self.initUI() 16 | #示例基于QMainWindow组件,因为我们中心需要设置一个文本编辑框组件。 17 | def initUI(self): 18 | self.textEdit = QTextEdit() 19 | self.setCentralWidget(self.textEdit) 20 | self.statusBar() 21 | 22 | openFile = QAction(QIcon('123.png'), 'Open', self) 23 | openFile.setShortcut('Ctrl+O') 24 | openFile.setStatusTip('Open new File') 25 | openFile.triggered.connect(self.showDialog) 26 | 27 | menubar = self.menuBar() 28 | fileMenu = menubar.addMenu('&File') 29 | fileMenu.addAction(openFile) 30 | 31 | self.setGeometry(300, 300, 350, 300) 32 | self.setWindowTitle('File dialog') 33 | self.show() 34 | 35 | 36 | def showDialog(self): 37 | 38 | fname = QFileDialog.getOpenFileName(self, 'Open file', '/home') 39 | #弹出文件选择框。第一个字符串参数是getOpenFileName()方法的标题。第二个字符串参数指定了对话框的工作目录。默认的,文件过滤器设置成All files (*)。 40 | if fname[0]: 41 | f = open(fname[0], 'r') 42 | with f: 43 | data = f.read() 44 | self.textEdit.setText(data) 45 | #选中文件后,读出文件的内容,并设置成文本编辑框组件的显示文本 46 | 47 | if __name__ == '__main__': 48 | app = QApplication(sys.argv) 49 | ex = Example() 50 | sys.exit(app.exec_()) 51 | #文件对话框是用于让用户选择文件或目录的对话框可以选择文件的打开和保存 52 | #在本示例中,显示了一个菜单栏,中间设置了一个文本框组件,和一个状态栏。点击菜单项会显示QtGui.QFileDialog(文件选择框)对话框,用于选择一个文件。文件的内容会被读取并在文本编辑框组件中显示。 -------------------------------------------------------------------------------- /PyQt5教程之组件2进度条.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import (QWidget, QProgressBar, 6 | QPushButton, QApplication) 7 | from PyQt5.QtCore import QBasicTimer 8 | 9 | 10 | class Example(QWidget): 11 | 12 | def __init__(self): 13 | super().__init__() 14 | 15 | self.initUI() 16 | 17 | 18 | def initUI(self): 19 | 20 | self.pbar = QProgressBar(self) 21 | self.pbar.setGeometry(30, 40, 200, 25) 22 | #这是滑块条类的构造方法。 23 | 24 | self.btn = QPushButton('Start', self) 25 | self.btn.move(40, 80) 26 | self.btn.clicked.connect(self.doAction) 27 | 28 | self.timer = QBasicTimer() 29 | self.step = 0 30 | #用定时器对象来激活进度条。 31 | 32 | self.setGeometry(300, 300, 280, 170) 33 | self.setWindowTitle('QProgressBar') 34 | self.show() 35 | 36 | 37 | def timerEvent(self, e): 38 | 39 | if self.step >= 100: 40 | self.timer.stop() 41 | self.btn.setText('Finished') 42 | return 43 | 44 | self.step = self.step + 1 45 | self.pbar.setValue(self.step) 46 | #每个QObject类和它的子类都有timerEvent()事件处理函数用于处理定时事件。为了对定时器事件作出反馈,我们重新实现了这个事件处理函数。 47 | 48 | def doAction(self): 49 | 50 | if self.timer.isActive(): 51 | self.timer.stop() 52 | self.btn.setText('Start') 53 | else: 54 | self.timer.start(100, self) 55 | self.btn.setText('Stop') 56 | #为了开启定时器事件,我们调用了start()方法。这个方法有两个参数:定时时间和接收定时器事件的对象。 57 | #在doAction()方法中,我们开始和停止定时器。 58 | 59 | 60 | if __name__ == '__main__': 61 | 62 | app = QApplication(sys.argv) 63 | ex = Example() 64 | sys.exit(app.exec_()) 65 | #在例子中有一个横向进度条和一个按钮。按钮控制滑块条的开始和停止。 -------------------------------------------------------------------------------- /PyQt5教程之组件2切换按钮.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | from PyQt5.QtWidgets import * 6 | from PyQt5.QtGui import QColor 7 | 8 | class Example(QWidget): 9 | def __init__(self): 10 | super().__init__() 11 | self.initUI() 12 | def initUI(self): 13 | self.col = QColor(0,0,0) 14 | #这里是初始化,让rgb值为黑色。 15 | 16 | redb = QPushButton('Red',self) 17 | redb.setCheckable(True) 18 | redb.move(10,10) 19 | #要创建按钮,就要创建QPushButton,并且调用setCheckable方法让它可被选中。 20 | redb.clicked[bool].connect(self.setColor) 21 | #我们把clicked信号连接到我们定义的方法上。我们使用clicked信号来操作布尔值。 22 | 23 | 24 | redb = QPushButton('Green',self) 25 | redb.setCheckable(True) 26 | redb.move(10,60) 27 | redb.clicked[bool].connect(self.setColor) 28 | 29 | blueb = QPushButton('Blue',self) 30 | blueb.setCheckable(True) 31 | blueb.move(10,110) 32 | blueb.clicked[bool].connect(self.setColor) 33 | 34 | self.square = QFrame(self) 35 | self.square.setGeometry(150,20,100,100) 36 | self.square.setStyleSheet('QWidget { background-color: %s }'%self.col.name()) 37 | 38 | self.setGeometry(300, 300, 280, 170) 39 | self.setWindowTitle('Toggle button') 40 | self.show() 41 | 42 | def setColor(self,pressed): 43 | source = self.sender() 44 | #我们获得发生状态切换的按钮 45 | if pressed: 46 | val = 255 47 | else: 48 | val = 0 49 | if source.text() == 'Red': 50 | self.col.setRed(val) 51 | #在这种情况下如果发生切换的按钮red按钮,我们更新rgb中红色部分的值 52 | elif source.text() == 'Green': 53 | self.col.setGreen(val) 54 | else: 55 | self.col.setBlue(val) 56 | 57 | self.square.setStyleSheet("QFrame { background-color: %s }" %self.col.name()) 58 | #我们使用样式表来改变背景颜色。 59 | if __name__ == '__main__': 60 | app = QApplication(sys.argv) 61 | ex = Example() 62 | sys.exit(app.exec_()) 63 | 64 | #在这个例子中我们创建了三个切换按钮和一个QWidget组件。我们把QWidget组件的背景颜色设置成黑色。切换按钮将在红色绿色蓝色的rgb只部分切换。QWidget组件的背景颜色将取决于哪一个切换按钮被按下。 65 | 66 | -------------------------------------------------------------------------------- /PyQt5教程之基础组件.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding:utf-8-*- 3 | 4 | import sys 5 | import os 6 | from PyQt5.QtWidgets import * 7 | from PyQt5.QtGui import QIcon,QFont 8 | from PyQt5.QtCore import QCoreApplication 9 | 10 | os.chdir('C:/Users/Administrator/AppData/Local/Programs/Python/Python35-32/0/PyQt5教程_博客园') 11 | 12 | class Example(QMainWindow): 13 | #在面向对象编程中有三个重要的东西,分别是类,数据,和方法。这里我们创建了一个新类叫做Example,Example类继承自QWidget类。这意味着我们调用了两个构造方法:第一个是Example类的构造方法,第二个是被继承类的构造方法。super()方法返回了Example类的父类的构造方法。并且我们调用了父类的构造方法。__init__()方法是python语言中的构造方法 14 | 15 | 16 | def __init__(self): 17 | super().__init__() 18 | self.initUI() 19 | #Gui的创建授予initUI()方法完成。 20 | 21 | def initUI(self): 22 | #QAction是一个用于菜单栏、工具栏或自定义快捷键的抽象动作行为。 23 | exitAction1 = QAction(QIcon('exit.png'), '&Exit', self) 24 | exitAction1.setShortcut('Ctrl+Q') 25 | #创建了一个有指定图标和文本为'Exit'的标签。另外,还为这个动作定义了一个快捷键。 26 | exitAction1.setStatusTip('Exit application') 27 | exitAction1.triggered.connect(qApp.quit) 28 | self.statusBar() 29 | 30 | menubar = self.menuBar() 31 | fileMenu = menubar.addMenu('&File') 32 | fileMenu.addAction(exitAction1) 33 | #我们创建了有一个菜单项的菜单栏。这个菜单项包含一个选中后中断应用的动作。 34 | exitAction2 = QAction(QIcon('exit24.png'), 'Exit', self) 35 | exitAction2.setShortcut('Ctrl+Q') 36 | exitAction2.setStatusTip('Exit application') 37 | exitAction2.triggered.connect(qApp.quit) 38 | #创建了一个动作对象,和之前菜单栏中的部分代码相似。这个动作有一个标签,图标和快捷键。并且将QtGui.QMainWindow的quit()方法连接到了触发信号上。 39 | self.toolbar = self.addToolBar('Exit') 40 | self.toolbar.addAction(exitAction2) 41 | #我们创建了一个简单的工具栏。工具栏有一个动作,当这个退出动作被触发时应用将会被中断。 42 | 43 | 44 | self.setWindowIcon(QIcon('123.png'))#三个方法都继承自QWidget类。setGeometry()做了两件事:将窗口在屏幕上显示,并设置了它的尺寸。setGeometry()方法的前两个参数定位了窗口的x轴和y轴位置。第三个参数是定义窗口的宽度,第四个参数是定义窗口的高度。事实上,这是将resize()和move()方法融合在一个方法内。为了做好这个例子,我们创建了一个QIcon对象。QIcon对象接收一个我们要显示的图片路径作为参数。 45 | QToolTip.setFont(QFont('SansSerif', 10)) 46 | #这个静态方法设置了用于提示框的字体。我们使用10px大小的SansSerif字体。 47 | self.setToolTip('This is a QWidget widget') 48 | #为了创建提示框,我们调用了setTooltip()方法。我们可以在提示框中使用富文本格式。 49 | btn = QPushButton('Button', self) 50 | btn.setToolTip('This is a QPushButton widget') 51 | #我们创建了一个按钮组件并且为它设置一个提示框。 52 | btn.resize(btn.sizeHint()) 53 | btn.move(50, 70) 54 | #这里改变了按钮的大小,并移动了在窗口上的位置。setHint()方法给了按钮一个推荐的大小。 55 | qbtn = QPushButton('Quit', self) 56 | qbtn.clicked.connect(QCoreApplication.instance().quit) 57 | qbtn.resize(qbtn.sizeHint()) 58 | qbtn.move(150, 70) 59 | 60 | self.statusBar().showMessage('Ready') 61 | #状态栏又QMainWindow组件帮助创建完成(依赖于QMainWindow组件)。 62 | #为了得到状态栏,我们调用了QtGui.QMainWindow类的statusBar()方法。第一次调用这个方法创建了一个状态栏。随后方法返回状态栏对象。然后用showMessage()方法在状态栏上显示一些信息。 63 | 64 | self.setGeometry(300,300,500,500) 65 | #self.resize(400,400) 66 | #self.center() 67 | #将窗口居中 68 | self.setWindowTitle('朱华建') 69 | self.show() 70 | 71 | def center(self): 72 | qr = self.frameGeometry() 73 | cp = QDesktopWidget().availableGeometry().center() 74 | qr.moveCenter(cp) 75 | self.move(qr.topLeft()) 76 | 77 | def closeEvent(self, event): 78 | 79 | reply = QMessageBox.question(self, 'Message', 80 | "Are you sure to quit?", QMessageBox.Yes | 81 | QMessageBox.No, QMessageBox.No) 82 | 83 | if reply == QMessageBox.Yes: 84 | event.accept() 85 | else: 86 | event.ignore() 87 | 88 | if __name__ == '__main__': 89 | app = QApplication(sys.argv) 90 | ex = Example() 91 | sys.exit(app.exec_()) 92 | #应用和example对象被创建。主循环被启动。 93 | 94 | #这段主要是给图形化界面添加了一些必要的组件,比如说按钮,工具栏,状态栏之类的。 95 | -------------------------------------------------------------------------------- /PyQt5教程之布局.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | 4 | 5 | '''绝对定位import sys 6 | from PyQt5.QtWidgets import QWidget, QLabel, QApplication 7 | 8 | class Example(QWidget): 9 | def __init__(self): 10 | super().__init__() 11 | self.initUI() 12 | def initUI(self): 13 | 14 | lbl1 = QLabel('Zetcode', self) 15 | lbl1.move(15, 10) 16 | 17 | lbl2 = QLabel('tutorials', self) 18 | lbl2.move(35, 40) 19 | 20 | lbl3 = QLabel('for programmers', self) 21 | lbl3.move(55, 70) 22 | 23 | self.setGeometry(300, 300, 250, 150) 24 | self.setWindowTitle('Absolute') 25 | self.show() 26 | 27 | if __name__ == '__main__': 28 | app = QApplication(sys.argv) 29 | ex = Example() 30 | sys.exit(app.exec_())''' 31 | 32 | '''箱布局import sys 33 | from PyQt5.QtWidgets import (QWidget, QPushButton, 34 | QHBoxLayout, QVBoxLayout, QApplication) 35 | 36 | 37 | class Example(QWidget): 38 | 39 | def __init__(self): 40 | super().__init__() 41 | 42 | self.initUI() 43 | 44 | 45 | def initUI(self): 46 | 47 | okButton = QPushButton("OK") 48 | cancelButton = QPushButton("Cancel") 49 | #这里我们创建了两个按钮 50 | 51 | hbox = QHBoxLayout() 52 | hbox.addStretch(1) 53 | hbox.addWidget(okButton) 54 | hbox.addWidget(cancelButton) 55 | #这里我们创建了一个水平箱布局,并且增加了一个拉伸因子和两个按钮。拉伸因子自两个按钮之前增加了一个可伸缩空间。这会将按钮推到窗口的右边。 56 | 57 | vbox = QVBoxLayout() 58 | vbox.addStretch(1) 59 | vbox.addLayout(hbox) 60 | #为了创建必要的布局,我们把水平布局放置在垂直布局内。拉伸因子将把包含两个按钮的水平箱布局推到窗口的底边 61 | 62 | self.setLayout(vbox) 63 | #最后设置一下窗口的主布局 64 | 65 | self.setGeometry(300, 300, 300, 150) 66 | self.setWindowTitle('Buttons') 67 | self.show() 68 | 69 | 70 | if __name__ == '__main__': 71 | 72 | app = QApplication(sys.argv) 73 | ex = Example() 74 | sys.exit(app.exec_())''' 75 | 76 | 77 | '''import sys网格布局 78 | from PyQt5.QtWidgets import (QWidget,QGridLayout,QPushButton,QApplication) 79 | class Example(QWidget): 80 | def __init__(self): 81 | super().__init__() 82 | self.initUI() 83 | def initUI(self): 84 | grid = QGridLayout() 85 | self.setLayout(grid) 86 | #在这个例子中,创建了一个全是按钮的网格布局。实例化QGridLayout类,并且把这个类设为应用窗口的布局 87 | names = ['cls','bck','','close', 88 | '7','8','9','/', 89 | '4','5','6','*', 90 | '1','2','3','-', 91 | '0','.','=','+'] 92 | #这些标签会在之后的按钮中使用 93 | positions = [(i,j) for i in range(5)for j in range(4)] 94 | #我们创建了一个网格的定位列表。 95 | for position , name in zip(positions,names): 96 | if name == '': 97 | continue 98 | button = QPushButton(name) 99 | grid.addWidget(button,*position) 100 | #创建出按钮,使用add Widget()方法向布局中添加按钮。 101 | self.move(300,150) 102 | self.setWindowTitle('Calculator') 103 | self.show() 104 | 105 | if __name__ == '__main__': 106 | app = QApplication(sys.argv) 107 | ex = Example() 108 | sys.exit(app.exec_()) 109 | 110 | #最常用的布局类是网格布局。这个布局使用行了列分割空间。要创建一个网格布局,我们需要使用QGridLayout类。''' 111 | 112 | 113 | import sys文本审阅窗口示例 114 | from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, 115 | QTextEdit, QGridLayout, QApplication) 116 | 117 | 118 | class Example(QWidget): 119 | 120 | def __init__(self): 121 | super().__init__() 122 | 123 | self.initUI() 124 | 125 | 126 | def initUI(self): 127 | title = QLabel('Title') 128 | author = QLabel('Author') 129 | review = QLabel('Review') 130 | 131 | titleEdit = QLineEdit() 132 | authorEdit = QLineEdit() 133 | reviewEdit = QTextEdit() 134 | 135 | grid = QGridLayout() 136 | grid.setSpacing(10) 137 | 138 | grid.addWidget(title, 1, 0) 139 | grid.addWidget(titleEdit, 1, 1) 140 | 141 | grid.addWidget(author, 2, 0) 142 | grid.addWidget(authorEdit, 2, 1) 143 | 144 | grid.addWidget(review, 3, 0) 145 | grid.addWidget(reviewEdit, 3, 1, 5, 1) 146 | 147 | self.setLayout(grid) 148 | 149 | self.setGeometry(300, 300, 350, 300) 150 | self.setWindowTitle('Review') 151 | self.show() 152 | 153 | if __name__ == '__main__': 154 | app = QApplication(sys.argv) 155 | ex = Example() 156 | sys.exit(app.exec_()) 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | --------------------------------------------------------------------------------