From 5613f79151f774918edc7e97f1fcdcffdc055ea4 Mon Sep 17 00:00:00 2001 From: DC_DC <3284155190@qq.com> Date: Fri, 1 Mar 2024 14:06:22 +0800 Subject: [PATCH] initial commit --- QT/PyQt/.idea/.gitignore | 8 +++ QT/PyQt/.idea/PyQt.iml | 8 +++ .../inspectionProfiles/Project_Default.xml | 18 ++++++ .../inspectionProfiles/profiles_settings.xml | 6 ++ QT/PyQt/.idea/misc.xml | 7 +++ QT/PyQt/.idea/modules.xml | 8 +++ QT/PyQt/1. 第一个QT程序.py | 29 ++++++++++ QT/PyQt/2. 居中显示窗口.py | 32 +++++++++++ QT/PyQt/3. QMainWindow主要内容.py | 54 ++++++++++++++++++ QT/PyQt/4. 多页面切换实例.py | 40 +++++++++++++ QT/PyQt/Photos/img.png | Bin 0 -> 4020 bytes 11 files changed, 210 insertions(+) create mode 100644 QT/PyQt/.idea/.gitignore create mode 100644 QT/PyQt/.idea/PyQt.iml create mode 100644 QT/PyQt/.idea/inspectionProfiles/Project_Default.xml create mode 100644 QT/PyQt/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 QT/PyQt/.idea/misc.xml create mode 100644 QT/PyQt/.idea/modules.xml create mode 100644 QT/PyQt/1. 第一个QT程序.py create mode 100644 QT/PyQt/2. 居中显示窗口.py create mode 100644 QT/PyQt/3. QMainWindow主要内容.py create mode 100644 QT/PyQt/4. 多页面切换实例.py create mode 100644 QT/PyQt/Photos/img.png diff --git a/QT/PyQt/.idea/.gitignore b/QT/PyQt/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/QT/PyQt/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/QT/PyQt/.idea/PyQt.iml b/QT/PyQt/.idea/PyQt.iml new file mode 100644 index 0000000..f571432 --- /dev/null +++ b/QT/PyQt/.idea/PyQt.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/QT/PyQt/.idea/inspectionProfiles/Project_Default.xml b/QT/PyQt/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..1b787d6 --- /dev/null +++ b/QT/PyQt/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/QT/PyQt/.idea/inspectionProfiles/profiles_settings.xml b/QT/PyQt/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/QT/PyQt/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/QT/PyQt/.idea/misc.xml b/QT/PyQt/.idea/misc.xml new file mode 100644 index 0000000..db8786c --- /dev/null +++ b/QT/PyQt/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/QT/PyQt/.idea/modules.xml b/QT/PyQt/.idea/modules.xml new file mode 100644 index 0000000..b32bc4c --- /dev/null +++ b/QT/PyQt/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/QT/PyQt/1. 第一个QT程序.py b/QT/PyQt/1. 第一个QT程序.py new file mode 100644 index 0000000..49d532e --- /dev/null +++ b/QT/PyQt/1. 第一个QT程序.py @@ -0,0 +1,29 @@ +#!D:\Python311\python.exe +# -*- coding: utf-8 -*- +# @Time : 2024/2/26 13:02 +# @Author : DC_DC +"""# 打印版本信息 +from PyQt6.QtCore import PYQT_VERSION_STR, QT_VERSION_STR +print(QT_VERSION_STR) +print(PYQT_VERSION_STR)""" + +import sys # 处理python解释器和系统的交互 +from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel +from PyQt6.QtGui import QIcon # 设置窗口的图标 + + +def main(): + app = QApplication(sys.argv) # 创建一个QApplication对象,用于管理GUI应用程序的控制流和主事件循环 + window = QMainWindow() # 创建一个QMainWindow对象,这是程序的主窗口 + window.setGeometry(500, 500, 300, 200) # 设置窗口的集合属性,即窗口在屏幕上的位置大小 + window.setWindowTitle("DC_DC") # 设置窗口标题 + window.setWindowIcon(QIcon('Photos/img.png')) # 设置窗口图标 + QLabel("Hello, World!", window) # 创建一个QLabel对象,并将其添加到主窗口中 + window.show() # 显示主窗口 + sys.exit(app.exec()) # 调用QApplication对象的exec()方法,进入GUI应用程序的主事件循环,sys.exit()则确保程序在退出事件循环侯正确地退出,并返回一个退出码0 + + +if __name__ == "__main__": + main() + +pass diff --git a/QT/PyQt/2. 居中显示窗口.py b/QT/PyQt/2. 居中显示窗口.py new file mode 100644 index 0000000..f5474bf --- /dev/null +++ b/QT/PyQt/2. 居中显示窗口.py @@ -0,0 +1,32 @@ +#!D:\Python311\python.exe +# -*- coding: utf-8 -*- +# @Time : 2024/2/26 13:34 +# @Author : DC_DC +import sys +from PyQt6.QtWidgets import QApplication, QWidget, QLabel +from PyQt6.QtGui import QGuiApplication +from PyQt6.QtGui import QIcon + + +class MyApplication(QWidget): + def __init__(self): + super().__init__() + self.init_ui() + + def init_ui(self): + self.setGeometry(0, 0, 300, 200) + self.setWindowIcon(QIcon('Photos/img.png')) + qr = self.frameGeometry() # 创建一个矩形对象qr,它表示窗口的几何形状 + + cp = QGuiApplication.primaryScreen().availableGeometry().center() # 获取主屏幕的几何属性,计算出屏幕中心点的坐标 + qr.moveCenter(cp) # 将窗口的几何形状移动到屏幕中心 + self.move(qr.topLeft()) # 将窗口移动到矩形的左上角,以实现窗口剧中显示的效果 + + QLabel('Hello World!', self) + + +if __name__ == '__main__': + app = QApplication(sys.argv) + ex = MyApplication() + ex.show() # 调用父类方法,显示窗口 + sys.exit(app.exec()) diff --git a/QT/PyQt/3. QMainWindow主要内容.py b/QT/PyQt/3. QMainWindow主要内容.py new file mode 100644 index 0000000..bdd97a8 --- /dev/null +++ b/QT/PyQt/3. QMainWindow主要内容.py @@ -0,0 +1,54 @@ +#!D:\Python311\python.exe +# -*- coding: utf-8 -*- +# @Time : 2024/2/26 14:01 +# @Author : DC_DC +""" +QMainWindow是QT框架中的一个类,用于创建主窗口应用程序,提供一个具有一般应用程序框架的主窗口,包括菜单栏、工具栏、状态栏和中央工作区域 +使用这个类可以管理主窗口 +1. 主窗口标题 +2. 主窗口标签 +3. 菜单栏 +4. 工具栏 +5. 状态栏 +""" +import sys + +from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel + + +class MyMainWindow(QMainWindow): + def __init__(self): + super().__init__() + # 设置主窗口标题 + self.setWindowTitle('My Main Window') + # 添加标签到中央工作区域 + central_widget = QLabel("Hello, QMainWindow!") + self.setCentralWidget(central_widget) + # 添加菜单栏 + menubar = self.menuBar() + file_menu = menubar.addMenu('File') + file_menu.addAction('Open') + file_menu.addAction('Save') + # 添加工具栏 + toolbar = self.addToolBar('Tools') + toolbar.addAction('Cut') + toolbar.addAction('Copy') + toolbar.addAction('Paste') + # 添加状态栏 + statusbar = self.statusBar() + statusbar.showMessage('Ready') + + +if __name__ == '__main__': + app = QApplication([]) # 这种写法和下面的写法一致 + """ + 为什么要实例化这个类呢? + 1. 管理应用程序的事件循环 + 2. 管理应用程序的全局状态 + 3,处理命令行参数 + 记住,创建一个QApplication对象是整个PyQT5应用程序的入口点 + """ + # app = QApplication(sys.argv if sys.argv else []) + window = MyMainWindow() + window.show() + app.exec_() diff --git a/QT/PyQt/4. 多页面切换实例.py b/QT/PyQt/4. 多页面切换实例.py new file mode 100644 index 0000000..6dce6ad --- /dev/null +++ b/QT/PyQt/4. 多页面切换实例.py @@ -0,0 +1,40 @@ +#!D:\Python311\python.exe +# -*- coding: utf-8 -*- +# @Time : 2024/2/28 16:09 +# @Author : DC_DC +import sys +from PyQt6.QtWidgets import QApplication, QMainWindow, QTabWidget, QVBoxLayout, QPushButton, QWidget, QHBoxLayout +from PyQt6.QtGui import QIcon + + +class MainWindow(QMainWindow): + def __init__(self): + super().__init__() + self.setWindowTitle("DC_DC") # 设置窗口标题 + self.setWindowIcon(QIcon('Photos/img.png')) # 设置图标 + self.setGeometry(100, 100, 800, 600) # 设置窗口大小 + self.tab_widget = QTabWidget() # 创建了一个QTabWidget实例,用于容纳标签页。 + self.setCentralWidget(self.tab_widget) # 设置标签页空间位置 + self.page1 = QWidget() # 创建页面1 + self.page2 = QWidget() # 创建页面2 + self.tab_widget.addTab(self.page1, "页面1") # 添加页面1到QTabWidget + self.tab_widget.addTab(self.page2, "页面2") # 添加页面2到QTabWidget + layout = QVBoxLayout() # 定义一个垂直布局对象,用来组织两个按钮 如果设置水平就实例化QHBoxLayout 一个布局对象只能被设置给一个父对象 + button1 = QPushButton("切换到页面1") # 定义一个按钮 + button1.clicked.connect(lambda: self.switch_page(1)) # 设置按钮的映射关系 + button2 = QPushButton("切换到页面2") # 定义一个按钮 + button2.clicked.connect(lambda: self.switch_page(2)) # 设置按钮的映射关系 + layout.addWidget(button1) # 添加按钮1到垂直布局对象 + layout.addWidget(button2) # 添加按钮2到垂直布局对象 + self.page2.setLayout(layout) # 按照布局规则进行摆放页面 + self.page1.setLayout(layout) # 按照布局规则进行摆放页面 + + def switch_page(self, index): + self.tab_widget.setCurrentIndex(index - 1) + + +if __name__ == "__main__": + app = QApplication([]) # 创建一个应用程序对象 + mainWin = MainWindow() + mainWin.show() + sys.exit(app.exec()) diff --git a/QT/PyQt/Photos/img.png b/QT/PyQt/Photos/img.png new file mode 100644 index 0000000000000000000000000000000000000000..7c98350d67aa4e24a4a8902a8ae5f09cb57e8d96 GIT binary patch literal 4020 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