pyqt5 基础学习

获取文件路径方法 sys.argv

print(sys.argv)
path=os.path.realpath(sys.argv[0])
print(path)
# 输出
['E:/desktop/pyqt5_516/test.py']
E:\desktop\pyqt5_516\test.py

窗口类

  • QWidget 控件和窗口的父类
  • QMainWindow 包含 菜单栏,工具栏,状态栏,标题栏等, 为主窗口区域
  • QDialog 对话框
QWidget
class mywnd(QWidget):

    def __init__(self):
        super(mywnd, self).__init__()
        self.initUI()

    def initUI(self):
        label = QLabel("xxx" )
        label.setStyleSheet("font-size:30px;color:red")
        label.setParent(self)
        
QMainWindow                                               
class MyWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        label = QLabel("这是文字~~")
        label.setStyleSheet("font-size:30px;color:red")

        # 调用父类中的menuBar,从而对菜单栏进行操作
        menu = self.menuBar()


        file_menu = menu.addMenu("文件")
        file_menu.addAction("新建")
        file_menu.addAction("打开")
        file_menu.addAction("保存")

QDialog
class MyDialog(QDialog):

    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        ok_btn = QPushButton("确定", self)
        ok_btn.setGeometry(50, 50, 100, 30)

基本UI (窗口的控件在窗口显示需要表明他的父亲是谁再进行show展示)

按钮QPushButton,文本QLabel,文本框QLineEdit

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit
from PyQt5.QtGui import QIcon
if __name__ == '__main__':
    w = QWidget()
    w.setWindowTitle("PyQt5--学习")    # 窗口标题
    w.setWindowIcon(QIcon('test.jpg')) # 设置窗口 logo
    # 调整大小和位置
    w.resize(100,100) # w,h 调整窗口大小
    qr = self.frameGeometry()
    cp = QDesktopWidget().availableGeometry().center()
    qr.moveCenter(cp)
    
    # 在窗口里面添加控件按钮QPushButton
    btn = QPushButton("按钮")
    # 设置按钮的父亲是当前窗口,等于是添加到窗口中显示
    btn.setParent(w)
    
    # 文本 QLabel
    label = QLabel("xxx: ", w)
    # 显示位置与大小 : x, y , w, h
    label.setGeometry(20, 20, 30, 30)
    
    # 文本框 QLineEdit
    edit = QLineEdit(w)
    edit.setPlaceholderText("请输入账号")
    edit.setGeometry(55, 20, 200, 20)
    
    # 展示窗口
    w.show()
    # 程序进行循环等待状态
    app.exec()

布局 ~ 水平-垂直-表单-抽屉布局

在Qt里面布局分为四个大类 :

  • QBoxLayout 主要属性 addStretch(x) 弹簧、addWidget(x) 添加
    • QHBoxLayout 水平
    • QVBoxLayout 垂直
  • QGridLayout 网格布局 主要属性 addWidget(btn,x,y) btn为组件 x,y 为第x行,第y列
  • QFormLayout
    • addRow 添加 行信息
  • QStackedLayout 抽屉布局
class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("垂直布局")
        # 垂直布局 (同水平布局)
        layout = QVBoxLayout()  

        # 作用是在布局器中增加一个伸缩量,默认值为零
        layout.addStretch(1)
        btn1 = QPushButton("按钮1")
        # 添加到布局器中
        # layout.addWidget(btn1, Qt.AlignmentFlag.AlignTop)
        layout.addWidget(btn1)
        layout.addStretch(1)
        
        btn2 = QPushButton("按钮2")
        # 添加到布局器
        layout.addWidget(btn2)
        
        data = {
                0: ["7", "8", "9", "+", "("],
                1: ["4", "5", "6", "-", ")"],
               }
        # 网格布局
        grid = QGridLayout()
        # 循环创建追加进去
        for line_number, line_data in data.items():
            # 此时line_number是第几行,line_data是当前行的数据
            for col_number, number in enumerate(line_data):
                # 此时col_number是第几列,number是要显示的符号
                btn = QPushButton(number)
                grid.addWidget(btn, line_number, col_number)

        # 把网格布局追加到容器中
        layout.addLayout(grid)
        
        # 表单容器
        form_layout = QFormLayout()
        # 创建输入框
        edit = QLineEdit()
        edit.setPlaceholderText("请输入账号")
        form_layout.addRow("账号:", edit)
        edit2 = QLineEdit()
        edit2.setPlaceholderText("请输入密码")
        form_layout.addRow("密码:", edit2)
        
        # 将from_layout添加到垂直布局器中
        layout.addLayout(form_layout)
        
        self.setLayout(layout)

QTableWidget 表格布局

class MyTableWidget(QTableWidget):
    def __init__(self, rows, columns, parent=None):
        super().__init__(rows, columns, parent)

        # 设置表头
        self.setHorizontalHeaderLabels(['Column 1', 'Column 2', 'Column 3'])
        self.setVerticalHeaderLabels(['Row 1', 'Row 2', 'Row 3'])

        # 填充表格
        for row in range(rows):
            for column in range(columns):
                item = QTableWidgetItem(f"Cell {row},{column}")  # 添加表信息
                self.setItem(row, column, item)

表格右键复制-查看-清除信息功能

  • CustomContextMenu 菜单设置
  • customContextMenuRequested 自定义菜单
  • table_widget.selectedItems 表格的选择信息获取
  • QApplication.clipboard() # 复制信息到剪切板

setWindowModality

NonModal 非模态窗口。用户可以与该窗口以及其他窗口进行交互,无需关闭该窗口即可切换到其他窗口。

WindowModal:窗口模态。当用户与该窗口交互时,他们将无法与其他属于同一父窗口或顶级窗口的窗口进行交互,直到关闭该模态窗口为止。但是,他们可以与其他不相关的应用程序窗口进行交互。

ApplicationModal:应用程序模态。这是最严格的模态类型。当用户与该窗口交互时,他们将无法与应用程序中的任何其他窗口进行交互,直到关闭该模态窗口为止。此时,整个应用程序将被阻塞,直到用户完成与模态窗口的交互。

# 开启右键复制功能,在表格中点击右键时,自动触发 right_menu 函数
table_widget.setContextMenuPolicy(Qt.CustomContextMenu) # 设置部件上下午菜单策略
table_widget.customContextMenuRequested.connect(self.table_right_menu) # 自定义菜单

table_layout.addWidget(table_widget)

def table_right_menu(self, pos):
    selected_item_list = self.table_widget.selectedItems()
    
    menu = QMenu()
    item_copy = menu.addAction("复制")
    item_log = menu.addAction("查看日志")
    item_log_clear = menu.addAction("清除日志")
    
    # 选中了那个?
    action = menu.exec_(self.table_widget.mapToGlobal(pos))
    
    if action == item_copy:
        # 赋值当前型号 B08166SLDF
        clipboard = QApplication.clipboard() # 复制信息到剪切板
        clipboard.setText(selected_item_list[0].text())
    
    if action == item_log:
        # 查看日志,在对话框中显示日志信息
        # 获取选中的型号
        row_index = selected_item_list[0].row()
        asin = self.table_widget.item(row_index, 0).text().strip()
    
        dialog = LogDialog(asin)
        dialog.setWindowModality(Qt.ApplicationModal)
        dialog.exec_()
    if action == item_log_clear:
        # 清空日志
        row_index = selected_item_list[0].row()
        asin = self.table_widget.item(row_index, 0).text().strip()
        file_path = os.path.join("log", "{}.log".format(asin))
        if os.path.exists(file_path):
            os.remove(file_path)

更新文本展示信息

label_status = QLabel("xxx")
label_status.setText(message)
label_status.repaint()  # 重绘

参考博客:

PyQT5介绍及基本使用-CSDN博客

3-7 执行状态管理_哔哩哔哩_bilibili开篇介绍_哔哩哔哩_bilibili

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值