PyQt5系列之基本布局与控件使用

基本使用

        1、创建应用,初始化UI界面,创建布局盒子 

# -*- coding: utf-8 -*-
# Creator: zhu
# Time: 2023-12-13
import xlwt
import sys, base64, xlrd, re, datetime
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog, QLabel, QMessageBox, QRadioButton, QComboBox
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PyQt5.QtCore import QUrl
import time

class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'CFS文件处理'
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)

        # 创建布局盒子
        layout = QVBoxLayout()

        self.setLayout(layout)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

        2、初始化UI(背景图、布局、各种控件按钮、大小)

                点击QPushButton, 下滑菜单QComboBox, 单选按钮QRadioButton

     def initUI(self):
        self.setWindowTitle(self.title)

        # QBoxLayout  盒子布局 layout虚拟容器
        layout = QVBoxLayout()
        background_label = QLabel(self)
        background_label.setPixmap(QPixmap("C:\\Users\\VSPN\\Desktop\\xml\\cd.png"))
        layout.addWidget(background_label)
        self.resize(400, 300)  # Set the window size to 600x900


        # Create a button to open the file dialog
        # 自定义button 大小 调用绑定方法 openFileNameDialog
        self.button = QPushButton('上传文件', self)
        self.button.setFixedWidth(465)
        self.button.setFixedHeight(50)
        self.button.clicked.connect(self.openFileNameDialog)


        # 创建下拉菜单并添加选项
        self.combo_box = QComboBox()
        self.combo_box.addItem('txt')
        self.combo_box.addItem('excl')

        # ---------------
        self.download_btn = QPushButton('下载文件', self)
        self.download_btn .clicked.connect(self.downloadFile)
        self.download_btn.setFixedWidth(465)
        self.download_btn.setFixedHeight(50)

        # 创建两个单选按钮
        self.radio_button1 = QRadioButton("Option 1")
        self.radio_button2 = QRadioButton("Option 2")


        # 选中选项变化时触发的方法
        self.radio_button1.toggled.connect(self.onRadioButtonToggled)
        self.radio_button2.toggled.connect(self.onRadioButtonToggled)
        
        # Layout 虚拟容器 通过addWidget(QWidget) / RemoveWidget(QWidget) 往里面添加 / 移除组件并实现多组件自动布局
        # 横向布局的是QHboxLayout(), 纵向布局的就是QVboxLayout(),
        layout.addWidget(self.button)
        layout.addWidget(self.combo_box)
        layout.addWidget(self.download_btn)
        self.setLayout(layout)
        self.show()

          3、实例方法(上传文件处理)

    def openFileNameDialog(self):
        # Open file dialog and get the selected file path
        # 设置文件对话框的选项
        options = QFileDialog.Options()
        fileName, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "", "All Files (*);;Python Files (*.py)", options=options)
        if fileName:
            try:
                # 此处文件处理逻辑 入mysql或者其他操作
                # xls_to_sql(fileName)
                print(fileName)
                self.fileName = fileName
                # QMessageBox弹窗提示
                QMessageBox.information(self, 'success', "上传文件成功", QMessageBox.Ok)
            except Exception as e:
                QMessageBox.information(self, 'Error', "上传文件失败", QMessageBox.Ok)

           4、下载方法(远程下载连接)

                        此为远程连接下载,亦可改成sql查询写文件等

    def downloadFiles(self):
        # Handle download operation here
        url = 'http://cfsraffle.vspnit.com/raffle/download'  # 文件 URL
        filename = 'raffle.xls'  # 保存的文件名
        url = QUrl(url)
        # 创建 QNetworkAccessManager 对象
        manager = QNetworkAccessManager(self)

        # 创建请求并发送到服务器获取文件内容
        try:
            # QUrl类型的url,不接受str类型的url
            request = QNetworkRequest(url)
            reply = manager.get(request)
        except Exception as e:
            print(e)
        # 等待文件下载完成
        # while not reply.isFinished():
            # QMessageBox.information(self, 'success', "开始下载文件", QMessageBox.Ok)
            # pass
            # 检查是否下载成功
        QMessageBox.information(self, 'success', "CFS中奖名单下载中", QMessageBox.Ok)
        time.sleep(5)
        if reply.error() != QNetworkReply.NoError:
            print(f"Error: {reply.error()}")
            QMessageBox.information(self, 'errr', "CFS中奖名单下载文件失败", QMessageBox.Ok)

        else:
            print("File downloaded successfully!")
            QMessageBox.information(self, 'success', "CFS中奖名单下载文件成功", QMessageBox.Ok)

            # 将文件保存到本地
            with open(filename, 'wb') as f:
                while not reply.isReadable():
                    pass
                device = reply.readAll()
                f.write(device)
            print(f"File saved as {filename}")

             5、获取下拉菜单选择的选项

    def qComboBoxToggled(self):
        # 获取下拉菜单选择的选项
        selected_item = self.combo_box.currentText()
        if selected_item == 'txt':
            QMessageBox.information(self, 'success', "下载txt成功", QMessageBox.Ok)

        elif selected_item == 'excl':
            QMessageBox.information(self, 'success', "下载excl成功", QMessageBox.Ok)

        else:
            return  # 处理无效选项的情况

             6、 检查哪个单选按钮被选中,并保存其值

 def onRadioButtonToggled(self, checked):
        # 获取下拉菜单选择的选项
        if checked:
            if self.sender() == self.radio_button1:
                self.selected_value = "Option 1"
                print("Option 1")
            elif self.sender() == self.radio_button2:
                self.selected_value = "Option 2"
                print("Option 2")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值