PyQt笔记

前言

最近用pyqt写标注工具,记录一下学习的内容。


头文件

import sys
from python_qt_binding.QtGui import *
from python_qt_binding.QtCore import *
from python_qt_binding.QtWidgets import *

UI类&主函数

class MyUI(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        # 数据成员
        self.buttons = {}
        self.jump_to = None
        # 界面初始化
        self.layout = QVBoxLayout() # 从上到下竖直布局
        self.init_ui() # 初始化界面
        
    def init_ui(self):
        self.init_name_buttons()
        self.init_operation_buttons()
        self.init_select_buttons()

        self.setLayout(self.layout)

    def init_name_buttons(self):
        row = QHBoxLayout() # 从左到右水平布局

        label = QLabel(self)
        label.setFixedSize(120, 30)
        label.setText("Name") # 标签名称
        row.addWidget(label)

        button_group = QButtonGroup(self) # 构建一个按钮群组
        self.buttons['name'] = {}

        self.buttons['name']['luyifan'] = QRadioButton("LuYifan") # 新建一个radio按钮
        self.buttons['name']['luyifan'].setChecked(False) # 默认为False
        button_group.addButton(self.buttons['name']['luyifan']) # 添加到按钮群组中去
        row.addWidget(self.buttons['name']['luyifan']) # 添加到该行(row)

        self.buttons['name']['xuqi'] = QRadioButton("XuQi")
        self.buttons['name']['xuqi'].setChecked(False)
        button_group.addButton(self.buttons['name']['xuqi'])
        row.addWidget(self.buttons['name']['xuqi'])

        self.buttons['name']['unknow'] = QRadioButton("Unknow")
        self.buttons['name']['unknow'].setChecked(True)
        button_group.addButton(self.buttons['name']['unknow'])
        row.addWidget(self.buttons['name']['unknow'])

        self.layout.addLayout(row) # 将这一行控件添加到layout排布中去

    def init_select_buttons(self):
        row = QHBoxLayout()  # 水平排布
        label = QLabel(self)
        label.setText("Eat")
        row.addWidget(label)

        self.food_button = QComboBox(self)
        self.food_button.setFixedSize(120, 30)
        self.food_button.addItem("Healthy Food")
        self.food_button.addItem("Hot Pot")
        self.food_button.addItem("Rice")
        self.food_button.addItem("Noodle")
        self.food_button.activated.connect(self.on_select_buttons)
        row.addWidget(self.food_button)

        self.layout.addLayout(row)
    
    def on_select_buttons(self):
        if self.food_button.currentText() == "Healthy Food":
            print ("Healthy Food")
        elif self.food_button.currentText() == "Hot Pot":
            print ("Hot Pot")
        elif self.food_button.currentText() == "Rice":
            print ("Rice")
        elif self.food_button.currentText() == "Noodle":
            print ("Noodle")

    def init_operation_buttons(self):
        row = QHBoxLayout()  # 水平排布

        button = QPushButton()
        button.setText("jump to")  # 按钮名称
        button.setFixedSize(80, 30)
        button.clicked.connect(self.on_jump_button)  # 按下后触发on_save_button函数
        row.addWidget(button)  # 将该按钮添加到该行(row)

        self.jump_to = QTextEdit(self)
        self.jump_to.setFixedSize(80, 30)
        row.addWidget(self.jump_to)

        button = QPushButton()
        button.setText("save") # 按钮名称
        button.setFixedSize(80, 30)
        button.clicked.connect(self.on_save_button) # 按下后触发on_save_button函数
        row.addWidget(button) # 将该按钮添加到该行(row)

        button = QPushButton()
        button.setText("reset") # 按钮名称
        button.setFixedSize(80, 30)
        button.clicked.connect(self.on_reset_button) # 按下后触发on_reset_button函数
        row.addWidget(button) # 将该按钮添加到该行(row)

        self.layout.addLayout(row) # 将这一行控件添加到layout的竖直排布中去

    def on_jump_button(self):
        pass

    def on_save_button(self):
        if self.buttons['name']['luyifan'].isChecked():
            print ('luyifan')
        elif self.buttons['name']['xuqi'].isChecked():
            print ('xuqi')
        elif self.buttons['name']['unknow'].isChecked():
            print ('unknow')

    def on_reset_button(self):
        self.buttons['name']['luyifan'].setChecked(False)
        self.buttons['name']['xuqi'].setChecked(False)
        self.buttons['name']['unknow'].setChecked(True)

if __name__ == '__main__':
    app = QApplication( sys.argv )

    myui = MyUI()
    myui.resize( 500, 500 )
    myui.show()

    app.exec_()

解释

  • 程序简单易懂,其实就是从上到下,一行一行写控件。每一行又是从左到右写控件。
  • 对于触发类型的按钮,按下后会触发对应的函数,这种按钮的定义可以使用局部变量。
  • 对于记录用户输入信息的按钮,需要定义为全局变量(self.buttons),用于在后期(不同的函数中)读取用户输入。

控件类型

  • QLabel

    标签,用于显示文本信息。

  • QRadioButton

    按钮,点击可以改变其状态(True or False)。

  • QButtonGroup

    button群组,管理一组QRadioButton,确保群组内每时刻只有一个QRadioButton被置为True。

  • QComboBox

    下拉选择框,提供了多个可能的选项,让用户选取其中一个

  • QPushButton

    触发按钮,按下后触发对应的函数

Search

    欢迎添加我的微信

    闷骚的程序员

    Table of Contents