pyqt5学习示例
1|0python代码编写pyqt5
1|1主窗口的类型:有三种窗口
# 相关函数方法 setWindowTitle() # 设置主窗口的标题 resize() # 设置窗口的大小 statusBar() # 创建状态栏 showMessage('信息',过期时间/秒) # 状态栏展示的信息 setWindowIcon(QIcon(图标)) # 设置窗口图标 QDesktopWidget().screenGeometry() # 获取屏幕的坐标系 geometry() # 获取窗口坐标系 move() # 移动窗口 QPushButton() # 创建按钮 QPushButton().clicked.connect(self.onClick_Button) # 将按钮与槽(自定义函数)绑定,点击按钮触发事件执行函数 QHBoxLayout() # 创建水平布局 QVBoxLayout() # 创建垂直布局 mainLayout = QGridLayout() # 创建栅格布局 mainLayout.addWidget(控件名,控件位置行索引,控件位置行索引,控件占几行,控件占几列) setBuddy() # 设置伙伴控件 QHBoxLayout().addWidget() # 添加组件到水平布局中 QWidget() # 子窗口, QWidget().setLayout(布局) # 将某种布局放到屏幕上 setCentralWidget(屏幕) # 让屏幕及框架放到窗口上 sender = self.sender() # 可以获取到button sender.text() # 获取到按钮上的内容 app = QApplication.instance() # 得到一个实例 app.quit() # 退出应用程序 setFont(QFont('字体', 大小)) # 设置字体和大小 setToolTip() # 设置悬浮提示信息 setGeometry(左右, 上下, 宽, 高) #第一个参数 是用户区域参照与屏幕左上角坐标原点的x坐标和y坐标,后面两个参数分别是用户区域的宽和高 # QLabel控件的基本用法 QLabel() # 创建label setAlignment(Qt.AlignCenter):设置文本的对齐方式,文本居中对齐 setPixmap(QPixmap("./images/4.jpg")) #用于在标签或按钮上显示图像,类型又BMP,GIF,JPG等 setOpenExternalLinks(True) #要么触发单击事件,要么链接,只能二者选其一,如果设为True用浏览器打开网页,如果设为False,调用槽函数 setAutoFillBackground(True) #背景自动填充 palette = QPalette() #填充 palette.setColor(QPalette.Window,Qt.blue) #设置label背景颜色 setPalette() # 调试板 setIndent(): #设置文本缩进 text(): #获取文本内容 setBuddy(): #设置伙伴关系 setText(): #设置文本内容 selectText(): #返回所选择的字符 setWordWrap(): #设置是否允许换行 linkHovered #当鼠标滑过QLabel控件时触发 linkActivated # 当鼠标单击QLabel控件时触发
QMainWindow:可以包含菜单栏、工具栏和标题栏,是最常见的窗口形式 QDialog:是对话窗口的基类,没有菜单栏、工具栏和标题栏 QWidget:不确定窗口的用途,就是用QWidget. 我们一般会使用QMainWindow,在QMainWindow里面使用QDialog,偶尔使用QWidget # 屏幕坐标 屏幕左上角坐标是(0,0) 工作区高度:窗口高度(不包含标签栏) 标签栏高度:标签栏坐标减去工作区坐标 widget.resize() # 设置的是工作区的尺寸
import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QIcon class FirstMainWin(QMainWindow): def __init__(self, parent=None): super().__init__(parent) # 设置主窗口的标题 self.setWindowTitle('第一个窗口标题') # 设置窗口的尺寸 self.resize(400, 300) self.status = self.statusBar() self.status.showMessage('只存在5秒的消息', 5000) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('./images/1.ico')) main = FirstMainWin() main.show() sys.exit(app.exec_())
1|2使用QDialog显示通用对话框
import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class QDialogDemo(QMainWindow): def __init__(self): super().__init__() self.initUI() def showDialog(self): # 创建对话框 dialog = QDialog() button = QPushButton('确定', dialog) button.clicked.connect(dialog.close) button.move(50, 50) dialog.setWindowTitle('对话框') # 设置模式 dialog.setWindowModality(Qt.ApplicationModal) dialog.exec() # 显示对话框 def initUI(self): self.setWindowTitle('QDialog案例') self.resize(300, 200) # 创建按钮 self.button = QPushButton(self) self.button.setText('弹出对话框') self.button.move(50, 50) self.button.clicked.connect(self.showDialog) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('1.jpg')) main = QDialogDemo() main.show() sys.exit(app.exec_())
1|3显示不同类型的消息对话框 QMessageBox
import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class QMessageBoxDemo(QWidget): def __init__(self): super(QMessageBoxDemo, self).__init__() self.initUI() def initUI(self): self.setWindowTitle('MessageBox 案例') self.resize(300, 400) # 垂直布局 layout = QVBoxLayout() # 创建按钮 self.button1 = QPushButton() self.button1.setText('显示关于对话框') self.button1.clicked.connect(self.showDialog) self.button2 = QPushButton() self.button2.setText('显示消息对话框') self.button2.clicked.connect(self.showDialog) self.button3 = QPushButton() self.button3.setText('显示警告对话框') self.button3.clicked.connect(self.showDialog) self.button4 = QPushButton() self.button4.setText('显示错误对话框') self.button4.clicked.connect(self.showDialog) self.button5 = QPushButton() self.button5.setText('显示提问对话框') self.button5.clicked.connect(self.showDialog) # 将组件按钮添加到垂直布局中 layout.addWidget(self.button1) layout.addWidget(self.button2) layout.addWidget(self.button3) layout.addWidget(self.button4) layout.addWidget(self.button5) # 将布局放到屏幕上 self.setLayout(layout) def showDialog(self): # 获取按钮文本内容 text = self.sender().text() if text == '显示关于对话框': # about弹出关于对话框 QMessageBox.about(self, '关于', '这是一个关于对话框') elif text == '显示消息对话框': reply = QMessageBox.information(self, '消息', '这是一个消息对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes) print(reply == QMessageBox.Yes) elif text == '显示警告对话框': QMessageBox.warning(self, '警告', '这是一个警告对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes) elif text == '显示错误对话框': QMessageBox.critical(self, '错误', '这是一个错误对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes) elif text == '显示提问对话框': QMessageBox.question(self, '提问', '这是一个提问对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('1.jpg')) main = QMessageBoxDemo() main.show() sys.exit(app.exec_()) <---------------------------------------> information(QWdiget parent,title,text,buttons,defaultButton) #弹出消息对话框 question(QWidget parent,title,text,buttons,defaultButton)# 弹出问答对话框 warning(QWidget parent,title,text,buttons,defaultButton)# 弹出警告对话框 critical(QWidget parent,title,text,buttons,defaultButton) # 弹出错误对话框 about(QWidget parent,title,text) # 弹出关于对话框 # 参数 QWdiget parent: 指定的父窗口控件 title: 对话框标题 text: 对话框文本 button: 对个标准按钮,默认为Ok, QMessageBox.Yes | QMessage.No defaultButton: 默认选中的标准按钮,默认选中第一个标准按钮
1|4显示不同类型的消息对话框 QInputDialog
import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class QInputDialogDemo(QWidget): def __init__(self): super(QInputDialogDemo, self).__init__() self.initUI() def initUI(self): # 设置窗口标题 self.setWindowTitle('输入对话框') # 创建表单布局 layout = QFormLayout() # 创建按钮 self.button1 = QPushButton('获取列表中的选项') # 绑定槽 self.button1.clicked.connect(self.getItem) # 创建输入框 self.lineEdit1 = QLineEdit() # 将按钮和输入框添加到一行中 layout.addRow(self.button1, self.lineEdit1) self.button2 = QPushButton('获取字符串') self.button2.clicked.connect(self.getText) self.lineEdit2 = QLineEdit() layout.addRow(self.button2, self.lineEdit2) self.button3 = QPushButton('获取整数') self.button3.clicked.connect(self.getInt) self.lineEdit3 = QLineEdit() layout.addRow(self.button3, self.lineEdit3) self.setLayout(layout) def getItem(self): items = ("C", "C++", "Python", "Java", "Rudy") # getItem获取列表里的选项输入 item, ok = QInputDialog.getItem(self, '请选择编程语言', '语言列表', items) if ok and item: self.lineEdit1.setText(item) def getText(self): # getText获取标准字符串的输入 text, ok = QInputDialog.getText(self, '文本输入框', '输入姓名') if ok and text: self.lineEdit2.setText(text) def getInt(self): # getInt获取整数的输入 num, ok = QInputDialog.getInt(self, '整型输入框', '输入整数') if ok and num: self.lineEdit3.setText(str(num)) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('1.jpg')) main = QInputDialogDemo() main.show() sys.exit(app.exec_())
1|5文件对话框 QFileDialog
# 打开本地图片并展示到屏幕上 # 选择本地文本文件,并将内容展示到屏幕上 import sys from PyQt5.QtGui import QIcon from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * class QFileDialogDemo(QWidget): def __init__(self): super(QFileDialogDemo, self).__init__() self.initUI() def initUI(self): # 创建垂直布局 layout = QVBoxLayout() # 创建按钮 self.button1 = QPushButton('加载图片') # 绑定槽 self.button1.clicked.connect(self.loadImage) # 将按钮添加到布局中 layout.addWidget(self.button1) # 创建label self.imageLabel = QLabel() # 将label添加到布局中 layout.addWidget(self.imageLabel) self.button2 = QPushButton('加载文本文件') self.button2.clicked.connect(self.loadText) layout.addWidget(self.button2) self.contents = QTextEdit() layout.addWidget(self.contents) # 将layout布局添加到屏幕上 self.setLayout(layout) self.setWindowTitle('文件对话框演示') def loadImage(self): # 选择单个文件 # getOpenFileName 返回用户所选择文件的名称,并打开该文件 fname, _ = QFileDialog.getOpenFileName(self, '打开文件', '.', '图像文件(*.jpg *.png)') # 用于在标签上显示图片 self.imageLabel.setPixmap(QPixmap(fname)) def loadText(self): # 创建用于打开和保存文件的标准对话框 dialog = QFileDialog() # 设置可以选择的文件类型,枚举常量是: # QFileDialog,AnyFile:任何文件 # QFileDialog.ExistingFile: 已存在的文件 # QFileDialog.Directory: 文件目录 # QFileDialog.ExistingFiles: 已存在的多个文件 dialog.setFileMode(QFileDialog.AnyFile) # 设置过滤器 dialog.setFilter(QDir.Files) if dialog.exec_(): # 接受选择文件的路径,默认为列表 filenames = dialog.selectedFiles() # 列表中第一个元素即是文件路径, f = open(filenames[0], mode='r', encoding='utf-8') with f: # 读取文本内容 data = f.read() # 将读取到的内容添加到多行文本框中 self.contents.setText(data) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('1.jpg')) main = QFileDialogDemo() main.show() sys.exit(app.exec_())
1|6选项卡控件 QTabWidget
import sys from PyQt5.QtGui import QIcon from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * class TabWidgetDemo(QTabWidget): def __init__(self, parent=None): super(TabWidgetDemo, self).__init__(parent) self.setWindowTitle('选项卡控件:QTabWidget') # 创建用于显示控件的窗口 self.tab1 = QWidget() self.tab2 = QWidget() self.tab3 = QWidget() self.addTab(self.tab1, '选项卡1') self.addTab(self.tab2, '选项卡2') self.addTab(self.tab3, '选项卡3') self.tab1UI() self.tab2UI() self.tab3UI() def tab1UI(self): # 创建布局 layout = QFormLayout() layout.addRow('姓名', QLineEdit()) layout.addRow('地址', QLineEdit()) # 每个tab的内容,参数1表示索引下标,从0开始,参数2为文本内容 self.setTabText(0, '联系方式') self.tab1.setLayout(layout) def tab2UI(self): # 创建表单布局 layout = QFormLayout() # 创建水平布局 sex = QHBoxLayout() sex.addWidget(QRadioButton('男')) sex.addWidget(QRadioButton('女')) layout.addRow(QLabel('性别'), sex) layout.addRow('生日', QLineEdit()) self.setTabText(1, '个人详细信息') # 将表单布局添加到tab2的窗口上 self.tab2.setLayout(layout) def tab3UI(self): # 创建水平布局 layout = QHBoxLayout() layout.addWidget(QLabel('科目')) layout.addWidget(QCheckBox('物理')) layout.addWidget(QCheckBox('高数')) self.setTabText(2, '教育程度') self.tab3.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('1.jpg')) main = TabWidgetDemo() main.show() sys.exit(app.exec_())
1|7堆栈窗口控件 QStackeWidget
import sys from PyQt5.QtGui import QIcon from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class QStackeWidgetDemo(QWidget): def __init__(self): super(QStackeWidgetDemo, self).__init__() self.setGeometry(300, 50, 10, 10) self.setWindowTitle('堆栈窗口控件:QStackeWidget') # 创建一个与QListView提供的列表视图类似的列表视图,具有用于添加和删除项目的接口,使用一个内部模型来管理列表中的每一个QListWidgetItem self.list = QListWidget() # 在指定是索引位置添加对象或字符串 self.list.insertItem(0, '联系方式') self.list.insertItem(1, '个人信息') self.list.insertItem(2, '教育程度') # 三个页面 self.stack1 = QWidget() self.stack2 = QWidget() self.stack3 = QWidget() self.tab1UI() self.tab2UI() self.tab3UI() # 创建堆栈窗口 self.stack = QStackedWidget() # 将上面创建的三个子窗口添加到堆栈窗口中 self.stack.addWidget(self.stack1) self.stack.addWidget(self.stack2) self.stack.addWidget(self.stack3) # 创建水平布局 hbox = QHBoxLayout() # 将列表视图添加到水平布局中 hbox.addWidget(self.list) # 将堆栈窗口添加到水平布局中 hbox.addWidget(self.stack) # 将整个水平布局添加到当前屏幕上 self.setLayout(hbox) # 改变列表行时触发的事件 self.list.currentRowChanged.connect(self.display) def display(self, index): """通过这个函数来切换索引 隐式的将索引传递过来 """ self.stack.setCurrentIndex(index) def tab1UI(self): # 表单布局 layout = QFormLayout() layout.addRow('姓名', QLineEdit()) layout.addRow('地址', QLineEdit()) self.stack1.setLayout(layout) def tab2UI(self): # 水平布局 layout = QFormLayout() hb_sex = QHBoxLayout() hb_sex.addWidget(QRadioButton('男')) hb_sex.addWidget(QRadioButton('女')) layout.addRow('性别', hb_sex) layout.addRow('生日', QLineEdit()) self.stack2.setLayout(layout) def tab3UI(self): # 水平布局 layout = QHBoxLayout() layout.addWidget(QLabel('科目')) layout.addWidget(QCheckBox('物理')) layout.addWidget(QCheckBox('高数')) self.stack3.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('1.jpg')) main = QStackeWidgetDemo() main.show() sys.exit(app.exec_())
1|8停靠控件 QDockWidget
import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class DockDemo(QMainWindow): def __init__(self): super(DockDemo, self).__init__() self.setWindowTitle('停靠控件: QDockWidget') # 水平布局 layout = QHBoxLayout() # 创建QDockWidget窗口(标题, 自身窗口) self.items = QDockWidget('Dockable', self) # 创建列表视图 self.listWidget = QListWidget() self.listWidget.addItem('item1') self.listWidget.addItem('item2') self.listWidget.addItem('item3') # 将列表视图添加到QDockWidget窗口 self.items.setWidget(self.listWidget) # 将输入框设置为中央小控件 self.setCentralWidget(QLineEdit()) # 设置Dock窗口是否可以浮动,如果设置为True,则表示可以浮动 self.items.setFloating(False) # 将窗口放置在中央小控件的右侧 self.addDockWidget(Qt.RightDockWidgetArea, self.items) if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('1.jpg')) main = DockDemo() main.show() sys.exit(app.exec_())
1|9容纳多文档的窗口
""" 容纳多文档的窗口 容纳多文档的 QMdiArea 多文档子窗口类 QMdiSubWindow 将QMdiSubWindow添加至QMdiArea中 """ import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class MultiDemo(QMainWindow): count = 0 def __init__(self, parent=None): super(MultiDemo, self).__init__(parent) # 设置窗口标题 self.setWindowTitle('容纳多文档的窗口') # 层叠,平铺 self.mdi = QMdiArea() # 将mdi设置为中央控件 self.setCentralWidget(self.mdi) # 创建一个菜单栏 bar = self.menuBar() # 添加菜单 file = bar.addMenu('File') # 新建窗口 file.addAction('New') # 显示方式,层叠 file.addAction('cascade') # 显示方式,平铺 file.addAction('Tiled') # 关联事件 file.triggered.connect(self.windowaction) def windowaction(self, q): print(q) print(q.text()) if q.text() == 'New': MultiDemo.count += 1 # 实例化多文档界面对象 sub = QMdiSubWindow() # 将文本编辑编辑组件添加到多文档界面中 sub.setWidget(QTextEdit()) # 设置当前窗口的标题 sub.setWindowTitle("子窗口" + str(MultiDemo.count)) # 将子窗口添加到Mdi区域 self.mdi.addSubWindow(sub) # 子窗口显示 sub.show() elif q.text() == "cascade": self.mdi.cascadeSubWindows() elif q.text() == "Tiled": self.mdi.tileSubWindows() if __name__ == '__main__': app = QApplication(sys.argv) app.setWindowIcon(QIcon('./images/t10.ico')) main = MultiDemo() main.show() sys.exit(app.exec_())
__EOF__

本文作者:404 Not Found
本文链接:https://www.cnblogs.com/weiweivip666/p/14555675.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
本文链接:https://www.cnblogs.com/weiweivip666/p/14555675.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人