pyqt 万能简易模板(四)

4 篇文章 3 订阅

本文将介绍一些pyqt5基本使用技巧,不借助Qtdesigner,而是全部用代码编写,将实现页面布局、窗口自适应、字体自适应等功能。一般的简易工程均可使用,简单高效。对于pyqt5的一些基本技巧,本文内容基本够用,可以快速实现自己想要的界面。 

Demo

import sys
import time
import cv2
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QTextEdit, QPushButton, QFileDialog
from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QGridLayout
from PyQt5.QtGui import QTextOption, QImage, QPixmap

class QtDemo(QWidget):
    def __init__(self):
        super(QtDemo, self).__init__()
        
        self.desktop = QApplication.desktop()
 
        #获取显示器分辨率大小
        self.screenRect = self.desktop.screenGeometry()
        self.height = self.screenRect.height()
        self.width = self.screenRect.width()
        #获取不同分辨率下需要缩放的比例,2560为参考尺寸
        self.scale_ratio = self.width / 2560
       
        # self.resize(900, 400)
        #根据显示器分辨率自动设置窗口大小
        self.setGeometry(50, 50, 50 + int(900 * self.scale_ratio), 50 + int(400 * self.scale_ratio))
        #设置窗口名称与标题
        self.setWindowTitle("QtDemo")
       
        self.label1 = QLabel(self)
        self.label1.setText('标题一')
        self.label1.setWordWrap(True)
        self.label1.setStyleSheet("QLabel{qproperty-alignment: AlignCenter;font-size:30px;font-weight:bold;font-family:宋体;}")
        self.label2 = QLabel(self)
        self.label2.setText('标题2')
        self.label2.setWordWrap(True)
        self.label2.setStyleSheet("QLabel{qproperty-alignment: AlignCenter;font-size:30px;font-weight:bold;font-family:宋体;}")
        self.label3 = QLabel(self)
        self.label3.setText('标题3')
        self.label3.setWordWrap(True)
        self.label3.setStyleSheet("QLabel{qproperty-alignment: AlignCenter;font-size:30px;font-weight:bold;font-family:宋体;}")
        
        self.label11 = QLabel(self)
        self.label11.setText("Label11")
        self.label11.resize(320, 320)
        #设置label样式
        self.label11.setStyleSheet("QLabel{background:#FFFFFF;}"
                                 "QLabel{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:15px;font-weight:bold;font-family:宋体;}")
        self.label12 = QLabel(self)
        self.label12.setText("Label12")
        self.label12.resize(320, 320)
        self.label12.setStyleSheet("QLabel{background:#FFFFFF;}"
                                 "QLabel{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:15px;font-weight:bold;font-family:宋体;}")
        
        self.text1 = QTextEdit(self)
        self.text1.setWordWrapMode(QTextOption.NoWrap)
        self.text1.setText("Text1")
        self.text1.setFixedSize(200, 320)
        self.text1.setStyleSheet("QTextEdit{background:#FFFFFF;}"
                                 "QTextEdit{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:15px;font-weight:bold;font-family:宋体;}")

        self.btn1 = QPushButton(self)
        self.btn1.setText("按钮一")
        self.btn1.clicked.connect(self.fun1)
        self.btn1.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        self.btn2 = QPushButton(self)
        self.btn2.setText("按钮二")
        self.btn2.clicked.connect(self.fun2)
        self.btn2.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        self.btn3 = QPushButton(self)
        self.btn3.setText("按钮三")
        self.btn3.clicked.connect(self.fun3)
        self.btn3.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        self.btn4 = QPushButton(self)
        self.btn4.setText("按钮四")
        self.btn4.clicked.connect(self.fun4)
        self.btn4.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")  
        self.btn5 = QPushButton(self)
        self.btn5.setText("按钮五")
        self.btn5.clicked.connect(self.fun5)
        self.btn5.setStyleSheet("QPushButton{background:(#F000F0)}"
                                 "QPushButton{qproperty-alignment: AlignCenter;color:rgb(300,300,300,120);font-size:25px;font-weight:bold;font-family:宋体;}")
        
        grid1 = QGridLayout()
        grid1.addWidget(self.label1, 1, 1)
        grid1.addWidget(self.label2, 1, 2)
        grid1.addWidget(self.label3, 1, 3)
        grid1.addWidget(self.label11, 2, 1)
        grid1.addWidget(self.label12, 2, 2)
        grid1.addWidget(self.text1, 2, 3)
        
        grid2 = QGridLayout()
        grid2.addWidget(self.btn1, 1, 1)
        grid2.addWidget(self.btn2, 1, 2)
        
        grid3 = QGridLayout()
        grid3.addWidget(self.btn3, 1, 1)
        grid3.addWidget(self.btn4, 1, 2)
        grid3.addWidget(self.btn5, 1, 3)

        hbox = QHBoxLayout()
        hbox.addStretch(2)
        hbox.addLayout(grid2)
        hbox.addStretch(2)
        hbox.addLayout(grid3)
        hbox.addStretch(3)
        
        vbox = QVBoxLayout()
        vbox.addLayout(grid1)
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        vbox.addStretch(1)
        
        self.setLayout(vbox)    
        
    def closeEvent(self, event):
        import os
        os._exit(1)
        
    def resizeEvent(self, event):
        #900为窗口初始尺寸
        font_size = event.size().width() * 30 // int(900 * self.scale_ratio)
        config = "QLabel{font-size:"+str(font_size)+"px;font-weight:bold;font-family:宋体;}"
        self.label1.setStyleSheet(config)
        self.label2.setStyleSheet(config)
        self.label3.setStyleSheet(config)
        
        w  = event.size().width()  * 320 // 900
        h = event.size().height() * 320 // 400
        self.label11.resize(w, h)
        self.label12.resize(w, h)
        self.text1.setFixedSize(w*200//320, h)
        
        btn_font_size = event.size().width() * 25 // int(900 * self.scale_ratio)
        config = "QPushButton{font-size:"+str(btn_font_size)+"px;font-weight:bold;font-family:宋体;}"
        self.btn1.setStyleSheet(config)
        self.btn2.setStyleSheet(config)
        self.btn3.setStyleSheet(config)
        self.btn4.setStyleSheet(config)
        self.btn5.setStyleSheet(config)
        
    def fun1(self):
        image_path, imgType = QFileDialog.getOpenFileName(self, "打开图片", "", "*.jpg;;*.png")
        img = cv2.imread(image_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        # frame = QImage(image_path)
        frame = QImage(img, img.shape[1], img.shape[0], img.shape[1] * 3, QImage.Format_RGB888)
        picture = QPixmap.fromImage(frame).scaled(self.label11.width(), self.label12.height())
        self.label11.setPixmap(picture)
        
    def fun2(self):
        self.btn2.setEnabled(False)
        self.btn2.setText('处理中')
        self.label12.setText("Fun2运行中,请稍后...")
        self.label12.setStyleSheet("color:#FF0000;font-size:25px;}")
        QApplication.processEvents()
        time.sleep(3)
        self.btn2.setEnabled(True)
        self.btn2.setText('按钮二')
        self.label12.setText("Fun2运行结束")
           
    def fun3(self):
        pass
       
    def fun4(self):
        pass
        
    def fun5(self):
        pass

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QtDemo()
    win.show()
    sys.exit(app.exec_())
    sys.exit(0)

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用PyQt5可以很方便地实现简易计算器的功能。以下是实现简易计算器的步骤: 1. 导入PyQt5模块和sys模块。 2. 创建一个QApplication对象。 3. 创建一个QWidget对象作为主窗口。 4. 创建一个QLineEdit对象用于显示计算结果。 5. 创建多个QPushButton对象作为数字和运算符按钮,并将它们添加到主窗口中。 6. 为每个按钮连接一个槽函数,用于处理按钮点击事件。 7. 在槽函数中,根据按钮的文本内容进行相应的计算,并将结果显示在QLineEdit对象中。 下面是一个简单的示例代码: ``` import sys from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QVBoxLayout class Calculator(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.result = QLineEdit() self.result.setReadOnly(True) vbox = QVBoxLayout() vbox.addWidget(self.result) grid = QGridLayout() self.buttons = {} button_texts = ['7', '8', '9', '+', '4', '5', '6', '-', '1', '2', '3', '*', '0', '.', '=', '/'] positions = [(i, j) for i in range(4) for j in range(4)] for position, text in zip(positions, button_texts): button = QPushButton(text) self.buttons[text] = button grid.addWidget(button, *position) vbox.addLayout(grid) self.setLayout(vbox) for text, button in self.buttons.items(): if text.isdigit() or text == '.': button.clicked.connect(self.handle_digit) elif text in ['+', '-', '*', '/']: button.clicked.connect(self.handle_operator) elif text == '=': button.clicked.connect(self.handle_equal) self.setWindowTitle('Calculator') self.show() def handle_digit(self): button = self.sender() digit = button.text() self.result.setText(self.result.text() + digit) def handle_operator(self): button = self.sender() operator = button.text() self.result.setText(self.result.text() + ' ' + operator + ' ') def handle_equal(self): expression = self.result.text() try: result = eval(expression) self.result.setText(str(result)) except: self.result.setText('Error') if __name__ == '__main__': app = QApplication(sys.argv) calc = Calculator() sys.exit(app.exec_()) ``` 相关问题: 1. 如何在PyQt5中创建主窗口? 2. 如何在PyQt5中创建按钮并连接槽函数? 3. 如何在PyQt5中显示文本框?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值