PyQt5----学习记录

1 篇文章 0 订阅

参考书为:PyQt5快速开发与实战

一、环境搭建

       基本上参考书本不会有大问题,需要注意的是:

       (1)尽量使用PIP安装,方便简洁。

       (2)Python安装路径,将会是你使用PIP安装PyQt时的路径。所以如果不想将这些东西

           安装到C盘下,那么你应该讲Python安装在你想要的路径。

       (3)安装完书本的一堆东西后,需要设置Eric6。书本上所说的PyQt5的Tools的路径并不对,正确应改为如下:

           

我Python安装在C盘根目录下。

 

二、PyQt5的使用

       (1)设置控件的伙伴关系(buddy)

           这个可用来使标签(Label)绑定控件,书本讲得不清楚。设置伙伴关系,标签里面的英文字符,可以被快捷键绑定。

           比方说有个标签名为“test”,还有个spinbox控件,设置它们之间为伙伴关系(将label拉向spinbox),并在label的text

           属性中改为"te&st"。

           

           然后保存,Ctrl + R 开始预览界面,这时候如果Alt + x ,我们发现spinbox被选中了。这就是伙伴关系的运用。

           同理,label的text属性改为“t&ext”,那么此时需要Alt + e才能选中spinbox了。

    

      (2)界面与逻辑分离

          具体操作如下:

          1、创建新项目:

               eric6->project->new

          2、生成一个简单界面,这里只有一个button与checkbox,并且编译成py文件:

               

               

               

               代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\PyQt5\mainwin.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(260, 130, 131, 51))
        self.pushButton.setObjectName("pushButton")
        self.checkBox = QtWidgets.QCheckBox(self.centralWidget)
        self.checkBox.setGeometry(QtCore.QRect(280, 260, 71, 16))
        self.checkBox.setObjectName("checkBox")
        MainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.checkBox.setText(_translate("MainWindow", "CheckBox"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

            3、创建逻辑文件,并编写代码:

               File->new->save

               我创建了一个名为:“callmainwin”的py文件:代码如下:

import sys
from PyQt5.QtWidgets import QApplication,QMainWindow
import Ui_mainwin   #这里是将生成的文件UI_mainwin.py  include到本模块
                    #也可以直接from Ui_mainwin import Ui_MainWindow
                    #直接将界面的类Ui_MainWindow添加进来

#Ui_mainwin.Ui_MainWindow指的是Ui_mainwin.py里面界面的类Ui_MainWindow
class MainCode(QMainWindow,Ui_mainwin.Ui_MainWindow):
      def __init__(self):
            QMainWindow.__init__(self)
            Ui_mainwin.Ui_MainWindow.__init__(self)  #初始化界面
            self.setupUi(self)
            self.pushButton.clicked.connect(self.bt_setcheckbox) #设置信号与对应槽函数

      #当Ui_MainWindow按键触发点击信号时,触发此函数将checkbox状态改变
      def bt_setcheckbox(self):
           if self.checkBox.checkState() == True:
                self.checkBox.setCheckState(False)
           else:
              self.checkBox.setCheckState(True) 
        
        
if __name__=='__main__':
	app=QApplication(sys.argv)
	md=MainCode()
	md.show()
	sys.exit(app.exec_())

           最后,F2运行“callmainwin.py”脚本,点击按键可以触发checkbox的状态改变

      (3)界面与逻辑分离(方法二)

          也可以利用eric6生成“Dialog Code”的方法实现:

          步骤1、2相同,就是创建一个界面并且转化为py代码,第3步有所不同

          3、生成对话框代码:

          

               然后,点击“new”输入生成的py文件名字以及生成的类的名称,并且选择对应控件发出的信号:

          

              确认后eric6会生成对应的py文件

          4、修改生成的py文件

                主要是添加槽函数对应的处理代码,以及设置本模块运行时,一些系统调用的类,修改后代码:

# -*- coding: utf-8 -*-

import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplication
from Ui_mainwin import Ui_MainWindow


class callmw(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):

        super(callmw, self).__init__(parent)
        self.setupUi(self)
    
    #这个是槽装饰器,button发送的点击信号所携带的参数
    #会作为pyqtSlot()的参数被带进来,这里的点击信号不带参数
    @pyqtSlot()     
    def on_pushButton_released(self):
        if self.checkBox.checkState() == True:
           self.checkBox.setCheckState(False)
        else:
           self.checkBox.setCheckState(True)
        

if __name__=='__main__':
	app=QApplication(sys.argv)
	md=callmw()
	md.show()
	sys.exit(app.exec_())

      (3)super函数的使用

          这个函数主要是用来使用继承的父类的同名方法的。参考:https://www.cnblogs.com/silencestorm/p/8404046.html

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值