当前位置: 首页 > article >正文

pyside6总结

文章目录

  • 参考
  • 说明
  • 代码模块化
  • `QMainWindow`和`QWidget`区别
  • 通过`Label`显示图片
    • 将UI文件编译成Python文件
    • 直接导入UI文件
  • 复选框和单选框

参考

  1. Learn Python GUI Development for Desktop – PySide6 and Qt Tutorial

说明

  1. PySide6编程可以分为两大类:QWidgetQML!

代码模块化

  1. main.py
import sys
from PySide6.QtWidgets import QApplication
from button_holder import ButtonHolder

if __name__ == "__main__":
  app = QApplication(sys.argv)
  window = ButtonHolder()
  window.show()
  app.exec()
  1. button_holder.py
from PySide6.QtWidgets import QMainWindow, QPushButton, QVBoxLayout

class ButtonHolder(QMainWindow):
  def __init__(self):
    super().__init__()
    self.setWindowTitle("Button Holder")
    button = QPushButton("Click Me")
    button.setCheckable(True)   # must for triggering toggled
    button.clicked.connect(self.on_click1)
    button.clicked.connect(self.on_click2)
    button.pressed.connect(self.on_press)
    button.released.connect(self.on_release)
    button.toggled.connect(self.on_toggled)   
    self.setCentralWidget(button)
  
  def on_click1(self):
    print("Button clicked")
  
  def on_click2(self, state: bool):  # seems same with toggled
    print("Button clicked:", state)

  def on_press(self):
    print("Button pressed")
  
  def on_release(self):
    print("Button released")
  
  def on_toggled(self, state: bool):  # only triggered by checkable button
    print("Button toggled:", state)

QMainWindowQWidget区别

  1. QMainWindowQWidget多了菜单栏,工具栏,状态栏;
  2. 在向主窗体添加元素(比如按钮)时,QMainWindow可以直接通过setCentralWidget()实现;而QWidget需要通过Layout间接实现;

通过Label显示图片

将UI文件编译成Python文件

  1. Qt DesignerResource Browser里面创建一个资源文件,然后在资源文件中添加需要显示的图片;
  2. Qt Designer添加一个QLabel,在其pixmap属性中添加图片;
  3. 通过pyside6-rcc.exe -o image_rc.py .\image.qrc将资源文件编译成py文件;(注意命名规则:必须是xxx_rc.pyxxx是第一步中创建的资源文件的文件名)
  4. 通过pyside6-uic.exe -o ui_test.py .\test.uiUI文件编译成py文件;
  5. 通过以下代码导入UI:
from PySide6.QtWidgets import QApplication, QWidget
from ui_test import Ui_Form     # ui_test 参考步骤4中生成的文件名; Ui_Form 参考 ui_test.py 文件中的类名;

class MainWindow(QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

app = QApplication([])
window = MainWindow()
window.show()
app.exec()

直接导入UI文件

  1. Qt DesignerResource Browser里面创建一个资源文件,然后在资源文件中添加需要显示的图片;
  2. Qt Designer添加一个QLabel,在其pixmap属性中添加图片;

复选框和单选框

  1. widget.py
from PySide6.QtWidgets import QWidget, QCheckBox, QRadioButton, QHBoxLayout, QVBoxLayout, QGroupBox, QButtonGroup

class Widget(QWidget):
  def __init__(self):
    super().__init__()

    os = QGroupBox("Choose operating system")
    win = QCheckBox("Windows")
    win.clicked.connect(self.win_checked)
    win.setChecked(True)
    linux = QCheckBox("Linux")
    mac = QCheckBox("Mac")

    os_layout = QVBoxLayout()
    os_layout.addWidget(win)
    os_layout.addWidget(linux)
    os_layout.addWidget(mac)
    os.setLayout(os_layout)

    drink = QGroupBox("Choose your favorite drink")
    beer = QCheckBox("Beer")
    beer.toggled.connect(self.beer_checked)
    juice = QCheckBox("Juice")
    coffee = QCheckBox("Coffee")
    beer.setChecked(True)

    exclusive_btn = QButtonGroup(self)  # must self
    exclusive_btn.addButton(beer)
    exclusive_btn.addButton(juice)
    exclusive_btn.addButton(coffee)
    exclusive_btn.setExclusive(True)
    # exclusive_btn.buttonClicked.connect(self.exclusive_checked)
    
    drink_layout = QVBoxLayout()
    drink_layout.addWidget(beer)
    drink_layout.addWidget(juice)
    drink_layout.addWidget(coffee)
    drink.setLayout(drink_layout)

    answer = QGroupBox("Answer")
    answerA = QRadioButton("A")
    answerA.clicked.connect(self.answerA_checked)
    answerB = QRadioButton("B")
    answerC = QRadioButton("C")
    answer_layout = QVBoxLayout()
    answer_layout.addWidget(answerA)
    answer_layout.addWidget(answerB)
    answer_layout.addWidget(answerC)
    answer.setLayout(answer_layout)

    h_layout = QHBoxLayout()
    h_layout.addWidget(os)
    h_layout.addWidget(drink)
    
    v_layout = QVBoxLayout()
    v_layout.addLayout(h_layout)
    v_layout.addWidget(answer)

    self.setLayout(v_layout)

  def win_checked(self):
    if self.sender().isChecked():
      print("Windows is checked")

  def beer_checked(self):
    if self.sender().isChecked():
      print(self.sender().text() + " is checked")

  def answerA_checked(self):
    if self.sender().isChecked():
      print(self.sender().text() + " is checked")

  def exclusive_checked(self):	# How to get the sender info?
    print(self.sender())
  1. main.py
import sys
from PySide6.QtWidgets import QApplication
from widget import Widget

app = QApplication(sys.argv)
window = Widget()
window.show()
app.exec()

http://www.kler.cn/a/463054.html

相关文章:

  • 啥是大模型
  • 【从零开始入门unity游戏开发之——unity篇05】unity6基础入门——运行游戏按钮、Game游戏窗口和Project项目窗口介绍
  • 电子电器框架 --- 电动汽车上的车载充电器(OBC)
  • CentOS — 压缩解压
  • Docker安装(Docker Engine安装)
  • Linux -- 单例模式
  • 网络编程原理:回显服务器与客户端通信交互功能
  • Day20:逻辑运算
  • 30.Marshal.AllocHGlobal C#例子
  • 递归算法.
  • AI对接之JSON Output
  • 使用连字符容易出错,尽量使用驼峰式的
  • java 上传txt json等类型文件解析后返回给前端
  • OpenCV-Python实战(9)——滤波降噪
  • C++“STL之String”
  • 说说缓存使用的具体场景都有哪些?缓存和数据库一致性问题该如何解决?缓存使用常见问题有哪些?
  • 融合表面信息和等变扩散的分子对接模型 SurfDock - 评测
  • Git的使用流程(详细教程)
  • NFT Insider #162:Cool Cats和Doodles或将推出代币
  • 线性表的三种常见查找算法(顺序查找、折半查找、分块查找)及算法分析
  • 无人机巡检在光伏电站中的应用优势
  • HarmonyOS NEXT版本Stage应用开发模型介绍(附视频讲解)
  • SWM221系列芯片之电机应用及控制
  • git的全通路线介绍
  • Mono里运行C#脚本19—get_runtime_by_version
  • stipple函数的坑......matlab绘制显著点