一.窗口
#设置窗口标题 setWindowTitle("标题") #设置窗口坐标和大小 setGeometry(0,0,800,600)
1 """ 2 项目模块: PyQt5 3 项目内容:窗口 4 5 """ 6 #导入系统参数 7 import sys 8 9 #导入PyQt5 10 from PyQt5.QtGui import * 11 from PyQt5.QtWidgets import * 12 13 14 #定义类 15 class MyWidget(QWidget): 16 17 def __init__(self): #类的初始化 18 19 super().__init__() #super()继承 20 21 self.setGeometry(0,0,800,600) #设置坐标: 0 0 大小800 600 22 23 self.setWindowTitle('窗口标题') 24 25 26 #类的实例化 27 myapp = QApplication(sys.argv) 28 29 mywidget = MyWidget() 30 31 mywidget.show() 32 33 sys.exit(myapp.exec_()) 34 35 36
二.界面加上图标
1 """ 2 项目模块: PyQt5 3 项目内容:窗口 4 5 """ 6 #导入系统参数 7 import sys 8 9 #导入PyQt5 10 from PyQt5.QtGui import * 11 from PyQt5.QtWidgets import * 12 13 14 #定义类 15 class MyWidget(QWidget): 16 17 def __init__(self): #类的初始化 18 19 super().__init__() #super()继承 20 21 self.setGeometry(0,0,800,600) #设置坐标: 0 0 大小800 600 22 23 self.setWindowTitle('窗口标题') 24 25 self.setWindowIcon(QIcon('i.ico')) #添加图标 26 27 28 #类的实例化 29 myapp = QApplication(sys.argv) 30 31 mywidget = MyWidget() 32 33 mywidget.show() 34 35 sys.exit(myapp.exec_()) 36 37 38
三.弹出提示信息
1 """ 2 项目模块: PyQt5 3 项目内容:窗口 4 5 """ 6 #导入系统参数 7 import sys 8 9 #导入PyQt5 10 from PyQt5.QtGui import * 11 from PyQt5.QtWidgets import * 12 13 14 #定义类 15 class MyWidget(QWidget): 16 17 def __init__(self): #类的初始化 18 19 super().__init__() #super()继承 20 21 self.setGeometry(0,0,800,600) #设置坐标: 0 0 大小800 600 22 23 self.setWindowTitle('窗口标题') 24 25 self.setWindowIcon(QIcon('i.ico')) 26 27 #设置提示信息 28 self.setToolTip("这是提示!!") 29 30 QToolTip.setFont(QFont('微软雅黑',10)) 31 32 33 #类的实例化 34 myapp = QApplication(sys.argv) 35 36 mywidget = MyWidget() 37 38 mywidget.show() 39 40 sys.exit(myapp.exec_()) 41 42 43
四.关闭窗口询问
1 """ 2 项目模块: PyQt5 3 项目内容:窗口 4 5 """ 6 #导入系统参数 7 import sys 8 9 #导入PyQt5 10 from PyQt5.QtGui import * 11 from PyQt5.QtWidgets import * 12 13 14 #定义类 15 class MyWidget(QWidget): 16 17 def __init__(self): #类的初始化 18 19 super().__init__() #super()继承 20 21 self.setGeometry(0,0,800,600) #设置坐标: 0 0 大小800 600 22 23 self.setWindowTitle('窗口标题') 24 25 self.setWindowIcon(QIcon('i.ico')) 26 27 def closeEvent(self,event): 28 29 #重新定义 closeEvent 30 31 replay = QMessageBox.question(self,'关闭', 32 "你确定要退出么?", 33 QMessageBox.Yes, 34 QMessageBox.No) 35 if replay == QMessageBox.Yes: 36 37 event.accept() 38 else: 39 event.ignore() 40 41 42 43 #类的实例化 44 myapp = QApplication(sys.argv) 45 46 mywidget = MyWidget() 47 48 mywidget.show() 49 50 sys.exit(myapp.exec_()) 51 52 53
五.屏幕居中显示
1 """ 2 项目模块: PyQt5 3 项目内容:窗口 4 5 """ 6 #导入系统参数 7 import sys 8 9 #导入PyQt5 10 from PyQt5.QtGui import * 11 from PyQt5.QtWidgets import * 12 13 14 #定义类 15 class MyWidget(QWidget): 16 17 def __init__(self): #类的初始化 18 19 super().__init__() #super()继承 20 21 self.setGeometry(0,0,800,600) #设置坐标: 0 0 大小800 600 22 23 self.resize(200,200) 24 25 self.setWindowTitle('窗口标题') 26 27 self.setWindowIcon(QIcon('i.ico')) 28 29 self.center() 30 31 def closeEvent(self,event): 32 33 #重新定义 closeEvent 34 35 replay = QMessageBox.question(self,'关闭', 36 "你确定要退出么?", 37 QMessageBox.Yes, 38 QMessageBox.No) 39 if replay == QMessageBox.Yes: 40 41 event.accept() 42 else: 43 event.ignore() 44 45 def center(self): 46 47 #获取屏幕的大小 48 screen = QDesktopWidget().screenGeometry() 49 #自身的大小(包括宽和高) 50 size = self.geometry() 51 self.move((screen.width() - size.width())/2, 52 (screen.height() - size.height())/2) 53 54 55 56 57 58 59 #类的实例化 60 myapp = QApplication(sys.argv) 61 62 mywidget = MyWidget() 63 64 mywidget.show() 65 66 sys.exit(myapp.exec_()) 67 68 69
六.状态栏
1 """ 2 项目模块: PyQt5 3 项目内容:窗口 4 5 """ 6 #导入系统参数 7 import sys 8 9 #导入PyQt5 10 from PyQt5.QtGui import * 11 from PyQt5.QtWidgets import * 12 13 14 #定义类 15 class MyWidget(QMainWindow): 16 17 def __init__(self): #类的初始化 18 19 super().__init__() #super()继承 20 21 self.setGeometry(0,0,800,600) #设置坐标: 0 0 大小800 600 22 23 self.resize(300,300) 24 25 self.setWindowTitle('窗口标题') 26 27 self.setWindowIcon(QIcon('i.ico')) 28 29 self.center() 30 31 self.status_bar() 32 33 def closeEvent(self,event): 34 35 #重新定义 closeEvent 36 37 replay = QMessageBox.question(self,'关闭', 38 "你确定要退出么?", 39 QMessageBox.Yes, 40 QMessageBox.No) 41 if replay == QMessageBox.Yes: 42 43 event.accept() 44 else: 45 event.ignore() 46 47 def center(self): 48 49 #获取屏幕的大小 50 screen = QDesktopWidget().screenGeometry() 51 #自身的大小(包括宽和高) 52 size = self.geometry() 53 self.move((screen.width() - size.width())/2, 54 (screen.height() - size.height())/2) 55 56 57 58 def status_bar(self): 59 60 self.statusBar().showMessage("程序已准备就绪...") 61 62 63 #类的实例化 64 myapp = QApplication(sys.argv) 65 66 mywidget = MyWidget() 67 68 mywidget.show() 69 70 sys.exit(myapp.exec_()) 71 72 73
七.菜单栏
1 """ 2 项目模块: PyQt5 3 项目内容:窗口 4 5 """ 6 #导入系统参数 7 import sys 8 9 #导入PyQt5 10 from PyQt5.QtGui import * 11 from PyQt5.QtWidgets import * 12 13 14 #定义类 15 class MyWidget(QMainWindow): 16 17 valueA = "about" 18 valueB = "aboutqt" 19 20 def __init__(self): #类的初始化 21 22 super().__init__() #super()继承 23 24 self.initUI() 25 26 27 28 def initUI(self): 29 self.setGeometry(0,0,800,600) #设置坐标: 0 0 大小800 600 30 31 self.resize(300,300) 32 33 self.setWindowTitle('窗口标题') 34 35 self.setWindowIcon(QIcon('i.ico')) 36 37 self.center() 38 39 self.menu_bar() 40 41 def menu_bar(self): 42 43 #=================编程语言========================= 44 lauguage_machine = self.menuBar().addMenu("编程语言") 45 lauguage_C = lauguage_machine.addAction("C/C++") 46 lauguage_Python = lauguage_machine.addAction("Python") 47 lauguage_C# = lauguage_machine.addMenu("C#") 48 lauguage_PHP = lauguage_machine.addAction("PHP") 49 lauguage_SQL = lauguage_machine.addMenu("SQL") 50 #SQL添加分支 51 relative_SQL = lauguage_SQL.addMenu("关系型数据库") 52 NoSQL = lauguage_SQL.addMenu("非关系型数据库") 53 #关系型数据库 54 SQL_Oracle = relative_SQL.addAction("Oracle") 55 SQL_DB2 = relative_SQL.addAction("DB2") 56 SQL_MySQL = relative_SQL.addAction("MySQL") 57 SQL_Access = relative_SQL.addAction("Access") 58 SQL_Server = relative_SQL.addAction("SQL Server") 59 SQL_Sybase = relative_SQL.addAction("Sybase") 60 SQL_vft = relative_SQL.addAction("vfp") 61 SQL_INGRES = relative_SQL.addAction("INGRES") 62 #非关系型数据库 63 SQL_SQL = NoSQL.addAction("SQL") 64 SQL_Redis = NoSQL.addAction("Redis") 65 SQL_MongoDB = NoSQL.addAction("MongoDB") 66 SQL_SQLite = NoSQL.addAction("SQLite") 67 #网页 68 lauguag_Web = lauguage_machine.addMenu("网页") 69 lauguag_HTML = lauguag_Web.addAction("HTML") 70 lauguag_CSS = lauguag_Web.addAction("CSS") 71 lauguag_JavaScript = lauguag_Web.addAction("JavaScript") 72 73 74 #=================爬虫========================= 75 menu_control = self.menuBar().addMenu('爬虫') 76 77 act_quit = menu_control.addAction('quit') 78 79 act_quit.triggered.connect(self.close) 80 81 #==================Web=================== 82 menu_help = self.menuBar().addMenu('Web') 83 84 act_about = menu_help.addAction('about') 85 86 act_about.triggered.connect(self.status) 87 88 act_aboutqt = menu_help.addAction('aboutqt') 89 90 act_aboutqt.triggered.connect(self.status_bar) 91 92 93 94 def closeEvent(self,event): 95 96 #重新定义 closeEvent 97 98 replay = QMessageBox.question(self,'关闭', 99 "你确定要退出么?", 100 QMessageBox.Yes, 101 QMessageBox.No) 102 if replay == QMessageBox.Yes: 103 104 event.accept() 105 else: 106 event.ignore() 107 108 def center(self): 109 110 #获取屏幕的大小 111 screen = QDesktopWidget().screenGeometry() 112 #自身的大小(包括宽和高) 113 size = self.geometry() 114 self.move((screen.width() - size.width())/2, 115 (screen.height() - size.height())/2) 116 117 118 119 def status_bar(self): 120 121 self.statusBar().showMessage("打开") 122 123 def status(self): 124 125 self.statusBar().showMessage("关闭") 126 127 128 #类的实例化 129 myapp = QApplication(sys.argv) 130 131 mywidget = MyWidget() 132 133 mywidget.show() 134 135 sys.exit(myapp.exec_()) 136 137 138
小项目
""" QtWidget: QDialog: 对话框 QLabel: 文本标签 QLineEdit: 单行文本输入框 QCheckBox: 文本标签的复选框 QPushButton: 按钮 QHBoxLayout: 布局管理器 QVBoxLayout: 布局管理器 QApplication: QApplication类管理GUI程序的控制流和主要设置 QtCore: pyqtSignal: pyqtSignal()方法定义新的信号,新的信号作为类的属性 QObject: 所有Qt对象的基类,是Qt对象模型的核心,这个模型的主要特征为信号与槽 pyqtSlot: @PyQt5.QtCore.pyqtSlot(参数) def on_发送者对象名称_发射信号名称(self, 参数): pass """ from PyQt5.QtWidgets import QDialog,QLabel,QLineEdit,QCheckBox,QPushButton, QHBoxLayout,QVBoxLayout,QApplication from PyQt5.QtCore import Qt,pyqtSignal,QObject,pyqtSlot #FindDialog类继承QDialog对话框 class FindDialog(QDialog): """ 两个类变量: findNext: findPrevious: """ #设置信号,没有设置name,信号名为findNext findNext = pyqtSignal(str,Qt.CaseSensitivity) findPrevious = pyqtSignal(str,Qt.CaseSensitivity) #初始化 def __init__(self,parent=None): #继承父类的初始化 super().__init__(parent) #标签Find what label = QLabel(self.tr("Find & what")) #单行文本输入框 self.lineEdit = QLineEdit() #绑定伙伴,快捷键Alt + w焦点 label.setBuddy(self.lineEdit) #文本标签的复选框 self.caseCheckBox = QCheckBox(self.tr("Match")) #文本标签的复选框 self.backwardCheckBox = QCheckBox(self.tr("Search &backward")) #Find按钮 self.findButton = QPushButton(self.tr("&Find")) #设置按钮的默认状态 self.findButton.setDefault(False) #按钮设置是否可点击 self.findButton.setEnabled(False) #close按钮 closeButton = QPushButton(self.tr("Close")) #文本框的文字改变执行enableFindButton()函数 self.lineEdit.textChanged.connect(self.enableFindButton) #find按钮点击执行findClicked函数 self.findButton.clicked.connect(self.findClicked) #close按钮点击执行关闭函数 closeButton.clicked.connect(self.close) topLeftLayout = QHBoxLayout() topLeftLayout.addWidget(label) topLeftLayout.addWidget(self.lineEdit) leftLayout = QVBoxLayout() leftLayout.addLayout(topLeftLayout) leftLayout.addWidget(self.caseCheckBox) leftLayout.addWidget(self.backwardCheckBox) rightLayout = QVBoxLayout() rightLayout.addWidget(self.findButton) rightLayout.addWidget(closeButton) rightLayout.addStretch() mainLayout = QVBoxLayout() mainLayout.addLayout(leftLayout) mainLayout.addLayout(rightLayout) self.setLayout(mainLayout) self.setWindowTitle(self.tr("Find")) self.setFixedHeight(self.sizeHint().height()) #enableFindButton函数传入参数text def enableFindButton(self,text): #Find按钮设置成是否可以点击 self.findButton.setEnabled(bool(text)) #装饰器 @pyqtSlot() #findClicked, def findClicked(self): #获取文本框的内容 text = self.lineEdit.text() #如果复选框的Match是√ if self.caseCheckBox.isChecked(): cs = Qt.CaseSensitive else: cs = Qt.CaseInsensitive #如果复选框search background√ if self.backwardCheckBox.isChecked(): #发射名为findPrevious信号,参数为(str,Qt.CaseSensitivity) self.findPrevious.emit(text,cs) else: self.findNext.emit(text,cs) if __name__ == "__main__": import sys app = QApplication(sys.argv) #FindDialog对话框实例化 findDialog = FindDialog() #定义两个函数,也就是信号槽 def find(text,cs): print('find:',text,'cs',cs) def findp(text,cs): print('findp',text,'cs',cs) #findNext连接find函数 findDialog.findNext.connect(find) ##findPrevious连接findp函数 findDialog.findPrevious.connect(findp) #对话框显示 findDialog.show() #执行退出 sys.exit(app.exec_())