pyQT的安装和使用

PyQT的安装和使用

pyQT的安装不需要在官网下载QT安装包,只需要创建conda环境然后pip安装,安装pyQT5-tools之后会安装QT designer,然后就可以可视化设计一个UI,然后通过Pyuic工具就可以转化为一个py文件,这个py文件就是整个工程,py文件中有一个class包含了整个UI设计,然后只需要编辑py文件中这个class的功能即可,编辑子函数。
(这个文档非常好)[https://www.w3ccoo.com/pyqt5/index.html]

VScode+pyQT installation

  1. 安装PyQt

    pip install PyQt5
    pip install PyQt5-tools
    

    vscode安装PYQT Integration便于使用pyqt

    # Pyqt-integration > Qtdesigner: Path
    \venv_QT\Lib\site-packages\qt5_applications\Qt\bin\designer
    
    # Pyqt-integration > Pyuic: Cmd 用于转化ui格式为py
    \venv_QT\Scripts\pyuic5
    
    # Pyqt-integration > Pyuic > Compile: Filepath
    默认是将ui转化好的py文件存在当前目录的ui文件夹下
    
  2. 使用Pyuic工具,将 .ui文件转换为 .py文件。

    • 在文件夹栏空白处点击右键点击「PYQT: New Form」启动Qt Designer软件

    • 「文件 > 另存为」,把所设计的 .ui文件保存到项目目录下

    • 右击 xxx.ui文件「PYQT: Compile Form」调用Pyuic工将 xxx.ui文件转换为 xxx_Ui.py文件,是可以相互转化的。

      # -x 开关向生成的 Python 脚本(来自 XML)添加了少量附加代码,使其成为可自执行的独立应用程序。
      pyuic5 -x input.py -o output.ui
      python -m PyQt6.uic.pyuic -x register.ui -o register.py
      
  • 对GUI界面进行修改和调整。在文件夹栏的 .ui文件右击,点击「PYQT: Edit in Designer」,即可启动Qt Designer对GUI界面进行编辑。

  • 编辑完成后保存并退出Qt Designer,对.ui文件右击,点击「PYQT: Compile Form」,重新更新一次 xxx_Ui.py文件即可。

  1. 使用python编程,调用GUI界面的 .py文件,编写GUI界面各组件的绑定事件函数,如点击某按钮时触发某函数,实现某功能。

    from PyQt5.QtWidgets import QApplication, QMainWindow
    import matchingNetworkDesigner_Ui # import GUI的.py文件 
    if __name__ == "__main__":
     app = QApplication(sys.argv) 
    MainWindow = QMainWindow() 
    ui = matchingNetworkDesigner_Ui.Ui_MainWindow()# ui=GUI的py文件名.类名
     ui.setupUi(MainWindow)
     ui.L_PB_cal.clicked.connect(L_cal) # 把函数绑定GUI的按钮的点击事件。
     ui.L_PB_reset.clicked.connect(L_reset)# 按钮名字「L_PB_cal」和「L_PB_reset」在Qt Designer中定义。
     MainWindow.show()
     sys.exit(app.exec_())
    

PyQT include

PyQT的模块组成其余就是和web,sql,opengl等一些相关的,用不着
QtCore其他模块使用的核心非 GUI 类
QtGui图形用户界面组件
QtXml处理 XML 的类
QtWidgets用于创建经典桌面样式 UI 的类。
QtDesigner用于扩展 Qt Designer 的类
PyQt5-tools的组成其余不用看的
assistantQt Assistant文档工具
pyqt5designerQt Designer GUI布局工具
linguist Qt Linguist翻译工具
qmake Qt软件构建工具
pyuic5用于从 ui 文件生成代码的 Qt 用户界面编译器

PyQT Basic Class

  • QObject 是所有 Qt 对象的基类
  • QPaintDevice类是所有可绘制对象的基类。
  • QWidget类,派生自 QObject 和 QPaintDevice 类,是所有用户界面对象的基类。一般QWidget就是初始的大页面
  • QApplication类管理 GUI 应用程序的主要设置和控制流程包含主事件循环,其实就控制每个页面的关闭开启
  • QMainWindow基于 GUI 的应用程序的顶级窗口是由 QMainWindow 小部件对象创建的

QT信号与插槽-最重要的概念

每个派生自 QObject 类的 PyQt 小部件都可以发出 “信号” 以响应一个或多个事件。信号是一个小部件的成员函数,比如点击click()。信号"连接connect"到一个"插槽function"。 插槽可以是任何可调用的 Python 函数。

  • 可以使用qt designer的Signal/Slot 编辑器(或按 F4)直接添加

  • widget.signal.connect(slot_function)
    button.clicked.connect(slot_function)
    

布局管理

绝对布局

  • 设置一个大画面setGeometry(10,10,300,200),然后里面的button位于move(50,2)
def window():
   app = QtGui.QApplication(sys.argv)

   w = QtGui.QWidget())    
   w.setGeometry(10,10,300,200)
   w.setWindowTitl

   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20e(“PyQt”)

   w.show()
   sys.exit(app.exec_())

if __name__ == '__main__':
   window()

相对布局

  • QBoxLayout垂直或水平排列

    • addWidget()将小部件添加到

    • addStretch()创建空的可拉伸框

    • addLayout()添加另一个嵌套布局

    • vbox = QVBoxLayout(),最后要win.setLayout(vbox)

  • QGridLayout以行和列排列

  • QFormLayout创建两列表单

qt组件

多页面

不止一个界面,如何弹出界面并多页面操作

简单的提示界面

  • QDialog

    def window():
       app = QApplication(sys.argv)
       w = QWidget()
       btn = QPushButton(w)
       btn.clicked.connect(showdialog)
       w.setWindowTitle("PyQt Dialog demo")
       w.show()
       sys.exit(app.exec_())
    def showdialog():
       dlg = QDialog()
       b1 = QPushButton("ok",dlg)
    
  • QMessageBox

    def window():
       app = QApplication(sys.argv)
       w = QWidget()
       b = QPushButton(w)
       b.clicked.connect(showdialog)
       w.setWindowTitle("PyQt MessageBox demo")
       w.show()
       sys.exit(app.exec_())
    def showdialog():
       msg = QMessageBox()
       msg.setIcon(QMessageBox.Information)
    

真正的多页面

  • SDI 单文档接口:显示多个独立的窗口。 这需要更多的内存资源。

  • MDI 多文档接口 :子窗口相对于彼此放置在主容器内。 容器小部件称为 QMdiArea。

QMdiArea 小部件一般占据 QMainWondow 对象的中心小部件。 该区域中的子窗口是 QMdiSubWindow 类的实例。

class MainWindow(QMainWindow):
   count = 0

   def __init__(self, parent = None):
      super(MainWindow, self).__init__(parent)
      self.mdi = QMdiArea()
      self.setWindowTitle("MDI demo")
      self.setCentralWidget(self.mdi)
      bar = self.menuBar()

      file = bar.addMenu("File")
      file.addAction("New")
      file.triggered[QAction].connect(self.windowaction)
   def windowaction(self, q): # 多个menu摁键传入参数
      print ("triggered")
      if q.text() == "New":
         MainWindow.count = MainWindow.count+1
         sub = QMdiSubWindow()
         sub.setWidget(QTextEdit())
         sub.setWindowTitle("subwindow"+str(MainWindow.count))
         self.mdi.addSubWindow(sub)
         sub.show()

面向对象地制作GUI

QSS

Qt Style Sheets Reference

Qt Style Sheets ExamplesQt 官方例子

Qt样式表(以下统称QSS)的术语和语法规则几乎和CSS相同。

  • 类似CSS,QSS每一条都是由一个选择器和一组声明构成:

    • 选择器选出要对哪种控件进行样式修改,

    • 每个声明都是键值对,键为属性,值为属性值

设置方法

  1. 局部设置,用setStyleSheet(QSS)

    label1 = QLabel('标签1', self)
    label1.setStyleSheet('background-color:green;')
    
    btn2 = QPushButton('按钮2', self)
    btn2.move(200, 100)
    btn2.resize(70, 30)
    #局部设置
    btn1.setStyleSheet('''
        QPushButton{
            color:red;
        }
        QPushButton:hover{
            background-color: green;
        }
    ''')
    
  2. 全局设置,把所有的buttun之类的都设置好QSS,然后直接对Mainwindow进行加载

    if __name__ == '__main__' :
        app = QApplication(sys.argv)
        window = Window()
        QssStyle = '''
                QPushButton:hover{
                        background-color: green;
                    }
                QPushButton[name="btn"]:hover{
                        background-color: red;
                    }
                QPushButton#btn:hover{
                        background-color: green;
                        color:red;
                    }
                '''
        # # 全局设置
        window.setStyleSheet(QssStyle)  # 当前窗口全局有效
        window.show()
        sys.exit(app.exec_())
    

为降低耦合,往往把QSS写在一个单独的style.qss文件中,然后在main.py的QApplication或QMainWindow中加载样式

QPushButton {
    background-color: #555555;
    border: none;
    color: white;
    font-size: 14px;
    border-radius: 3px;
    padding: 5px 10px;}QPushButton:hover {
    background-color: #666666;}QProgressBar {
    background-color: #444444;
    height: 8px;
    border-radius: 4px;}QProgressBar::chunk {
    background-color: #777777;}QSlider {
    background-color: #444444;}QSlider::handle:horizontal {
    background-color: #666666;
    border-radius: 100%;
    width: 12px;
    height: 12px;
    margin: -3px 0;}
# 加载QSS样式的方法
app = QApplication(sys.argv)
window = MainWindow()

style_file = './style.qss'
style_sheet = QSSLoader.read_qss_file(style_file)
window.setStyleSheet(style_sheet)

window.show()
sys.exit(app.exec_())

Qt-material

一个github开源,可以快速设置所有的qss。还有很多其他的快速设置qss的库GTRONICK-QSS,飞扬青云-QSS,QDarkStyleSheet

pip install qt-material
# 使用例子
import sys
from PyQt5 import QtWidgets
from qt_material import apply_stylesheet

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()

apply_stylesheet(app, theme='dark_teal.xml')

window.show()
app.exec_()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值