pyqt5自学教程

说明:

参考的博客资料等都在文中有所标记,只是一个自我学习的过程,如果有什么不合适的地方请联系我,欢迎大家相互学习交流进步。


(一):安装

安装不多说,自己就那3个外部工具搞了很久,后来换了一个虚拟环境好了

PyCharm安装配置PyQt5/QtDesigner/PyUic的超详细教程-优快云博客


(二):上手第一个demo

[PyQt5应用实例]获取城市天气预报_pyqt5 北京上海苏州 天气-优快云博客

PyQt完整入门教程 - lovesoo - 博客园

其中最后的打包为exe我还没做

参考代码如下:

weather.py

import sys
import weather
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow
import requests


class MainDialog(QMainWindow):
    def __init__(self, parent=None):
        super(QMainWindow, self).__init__(parent)
        self.ui = weather.Ui_MainWindow()
        self.ui.setupUi(self)

    def queryWeather(self):
        cityName = self.ui.comboBox.currentText()
        cityCode = self.getCode(cityName)

        r = requests.get("http://t.weather.sojson.com/api/weather/city/{}".format(cityCode))

        print(r.json())

        if r.json().get('status') == 200:
            weatherMsg = '城市:{}\n日期:{}\n天气:{}\nPM 2.5:{} {}\n温度:{}\n湿度:{}\n风力:{}\n\n{}'.format(
                r.json()['cityInfo']['city'],
                r.json()['data']['forecast'][0]['ymd'],
                r.json()['data']['forecast'][0]['type'],
                int(r.json()['data']['pm25']),
                r.json()['data']['quality'],
                r.json()['data']['wendu'],
                r.json()['data']['shidu'],
                r.json()['data']['forecast'][0]['fl'],
                r.json()['data']['forecast'][0]['notice'],
            )
        else:
            weatherMsg = '天气查询失败,请稍后再试!'

        self.ui.textEdit.setText(weatherMsg)

    def getCode(self, cityName):
        cityDict = {"北京": "101010100",
                    "上海": "101020100",
                    "天津": "101030100"}

        return cityDict.get(cityName, '101010100')

    def clearText(self):
        self.ui.textEdit.clear()


if __name__ == '__main__':
    myapp = QApplication(sys.argv)
    myDlg = MainDialog()
    myDlg.show()
    sys.exit(myapp.exec_())

stat.py

import sys
import weather
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow
import requests


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(QMainWindow, self).__init__(parent)
        self.ui = weather.Ui_MainWindow()
        self.ui.setupUi(self)

    def queryWeather(self):
        cityName = self.ui.comboBox.currentText()
        cityCode = self.getCode(cityName)

        r = requests.get("http://t.weather.sojson.com/api/weather/city/{}".format(cityCode))

        print(r.json())

        if r.json().get('status') == 200:
            weatherMsg = '城市:{}\n日期:{}\n天气:{}\nPM 2.5:{} {}\n温度:{}\n湿度:{}\n风力:{}\n\n{}'.format(
                r.json()['cityInfo']['city'],
                r.json()['data']['forecast'][0]['ymd'],
                r.json()['data']['forecast'][0]['type'],
                int(r.json()['data']['pm25']),
                r.json()['data']['quality'],
                r.json()['data']['wendu'],
                r.json()['data']['shidu'],
                r.json()['data']['forecast'][0]['fl'],
                r.json()['data']['forecast'][0]['notice'],
            )
        else:
            weatherMsg = '天气查询失败,请稍后再试!'

        self.ui.textEdit.setText(weatherMsg)

    def getCode(self, cityName):
        cityDict = {"北京": "101010100",
                    "上海": "101020100",
                    "天津": "101030100"}

        return cityDict.get(cityName, '101010100')

    def clearText(self):
        self.ui.textEdit.clear()


if __name__ == '__main__':
    myapp = QApplication(sys.argv)
    myMainWin = MainWindow()
    myMainWin.show()
    sys.exit(myapp.exec_())

(三):窗口介绍

ctrl+R开启窗口预览

参考:

https://blog.youkuaiyun.com/xiaowang_csdn/category_12199680.html

手把手教你学习PyQT5:打造精美、功能强大的桌面应用程序(更新中。。)-优快云博客

1:QMain Window

在QMainWindow中,中心窗口是最重要的部分,它可以是任何Qt窗口部件,如QTextEdit、QTableView、QGraphicsView等

QMainWindow的一些常用成员函数包括:

setCentralWidget():设置中心窗口部件
setMenuBar():设置菜单栏
addToolBar():添加工具栏
statusBar():获取状态栏
show():显示主窗口
总的来说,QMainWindow是一个非常强大的窗口部件,它可以用于创建各种类型的应用程序界面,如主窗口应用程序、多文档应用程序等。我们通常创建的是这个窗口


2:Qwidget

Qt框架中所有用户界面部件的基类,包括窗口、对话框、按钮、标签、文本框、图形视图等等。QWidget提供了一些基本的用户界面功能,例如绘制、事件处理、布局等。


在Qt中,所有的用户界面部件都是从QWidget派生而来的,这意味着QWidget提供了一个通用的接口,以便于在不同的用户界面部件之间共享代码和实现。同时,QWidget也提供了一些常用的属性和方法,例如size()、pos()、setWindowTitle()等,以便于管理和操作界面部件。


在创建自定义用户界面部件时,我们可以从QWidget派生出我们自己的部件类,并通过重载其成员函数来实现自定义行为。例如,我们可以通过重载QWidget的paintEvent()函数来绘制自己的部件,或者通过重载其mousePressEvent()函数来处理鼠标点击事件。


两者的区别:

QMainWindowQWidget子类,是Qt框架中的一个主窗口类,它提供了一个应用程序的主界面,可以包含菜单栏、工具栏、状态栏、中心窗口等各种窗口部件。

QMainWindow作为应用程序主窗口,它是顶层窗口,而QWidget可以是顶层窗口或其他窗口的子窗口

QWidget可以作为独立窗口创建,也可以作为其他窗口的子窗口创建,而QMainWindow只能作为应用程序主窗口创建。

外加:QDialog: 是对话窗口的基类,没有菜单栏、工具栏、状态栏。


(四):控件以及事件

1:Layouts

就是对齐/布局

Qt6教程之二(1) 布局 Layouts_qt怎么拖布局-优快云博客

2:Spacers

就是在缩放界面的时候的一个弹簧,可以自动调节元素直接的间隔

Qt6教程之二(2) Spacers_qt spacer-优快云博客

五个按钮就会随着窗口的缩放而自动 “收弹” 了


3:Buttons

(1):push button 

Qt6教程之二(3) Buttons_qt pushbutton-优快云博客

编写好框架文件以后,启动代码

import sys
import learing_test
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(QMainWindow, self).__init__(parent)
        self.ui = learing_test.Ui_MainWindow()
        self.ui.setupUi(self)



if __name__ == '__main__':
    myapp = QApplication(sys.argv)
    myMainWin = MainWindow()
    myMainWin.show()
    sys.exit(myapp.exec_())

(2):tool button

Qt6教程之二(3) Buttons_qt pushbutton-优快云博客

同时还多一个trigered信号,就是实现弹出菜单,然后咱们点击了哪一项action,发射的信号。

但是这个trigered暂时使用GUI界面的操作无法实现

(3):radio button 单选框按钮

radio button称为单选框按钮,当多个radio button同属于一个父组件时,只能选择一个单选按钮,多个按钮之间形成互斥关系!

实现单选框按钮的事件,就是绑定信号与槽

也是可以实现选择然后关闭程序的,和push button的功能有部分一样

QRadioButton 没有自己独有的信号,可以使用pressed、released、clicked、toggled等信号。由于QRadioButton常用作选择按钮,需要判断选择状态,所以toggled信号比较常用,使用void toggled(bool checked);信号可以获得该按钮的选中状态

(4):check box

check box是一个带文本标签的浮选框,这意味着当同一父组件下存在多个check box时,可以选中多个,与radio button刚好相反。

对于复选框,最常用的功能就是检测是否选中,信号为stateChange

(5):command link button

command link button是命令链接按钮,可以显示图标和文字,常用于向导和对话框中的单选按钮的替代。可以在右侧的属性栏设置图标、文字等

目前为止,我们所有的控件实现的功能都是触发以后进行窗口的关闭

(6):dialog button box

dialog button box是一个包含很多按钮的控件,可以向QDialogButtonBox添加按钮,QDialogButtonBox会根据平台自动使用合适的布局。


4:Containers

(1):Group Box

使用QGroupBox来分组相关的控件,如单选按钮。

(2):Scroll Area

创建一个QScrollArea,在其中放置一个大控件。

太长自己会生成 滚动区域

(3):Tool Box

使用QToolBox来创建带有折叠面板的容器。

可以点击panel切换当前版面的小界面

(4):Tab Widget 

创建一个QTabWidget,其中包含多个标签页。

(5):Stacked Widget

使用QStackedWidget来创建一个堆叠的控件容器。

(6):Frame

QFrame 可用于创建一个简单的容器,常常用于绘制边框和分隔内容。

(7):Widget

QWidget 是PyQt5中所有用户界面对象的基类,也可以作为一个通用的容器。

(8):MDI Area

QMdiArea 提供了一个多文档接口(MDI),允许管理多个子窗口。

(9):Dock Widget

QDockWidget 提供了可停靠的控件,这些控件可以被移动和重新停靠在主窗口的不同位置。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值