PyQt 5 基本窗口控件


QMainWindow、QWidge和QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用。

  1. QMainWindow窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口。
  2. QDialog是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它也可以是模态的,也可以是非模态的。QDialog窗口没有菜单栏、工具栏、状态栏等。
  3. 如果是主窗口,就使用QMainWindow类,如果是对话框,就使用QDialog类,如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他的窗口中,那么就使用QWidge类。

1. 创建主窗口QMainWindow

界面文件代码

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

# Form implementation generated from reading ui file 'MainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(400, 200)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 400, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

逻辑文件代码

import sys
from PyQt5.QtWidgets import QApplication,QMainWindow
from MainWindow import *
from PyQt5.QtGui import QIcon


'''
逻辑文件--业务文件,实现界面与逻辑的分离,该文件继承了界面文件的主窗口类
'''
class MyMainWindow(QMainWindow,Ui_MainWindow):
    def __init__(self,parent=None):
        super(MyMainWindow,self).__init__(parent)
        # 启动主界面
        self.setupUi(self)
        # 根据需求对界面文件进行调整
        self.resize(800, 800)
        # 设置状态栏
        self.status = self.statusBar()
        # 获得状态栏对象后,调用状态栏对象的showMessage(self, p_str, msecs=0)方法,显示状态栏信息,其中第一个参数是要显示的状态栏信息,
        # 第二个参数信息停留的时间,单位是毫秒,默认是0,表示一直显示状态栏信息
        self.status.showMessage("这是状态栏提示",5000)
        self.setWindowTitle("PyQt MainWindow例子")

if __name__=='__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("./images/cartoon1.ico"))
    myWin = MyMainWindow()
    myWin.show()
    sys.exit(app.exec_())

结果展示:
在这里插入图片描述

2. QComboBox(下拉列表框)

界面文件代码

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

# Form implementation generated from reading ui file 'QComboBox.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(130, 80, 87, 22))
        self.comboBox.setObjectName("comboBox")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(140, 140, 72, 15))
        self.label.setText("")
        self.label.setObjectName("label")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

逻辑文件代码

import sys
from PyQt5.QtWidgets import *
from QComboBox import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *


'''
逻辑文件--业务文件,实现界面与逻辑的分离,该文件继承了界面文件的主窗口类
'''
# 创建一个类使用QComboBox按钮
class ComboxDemo(QWidget,Ui_Form):
    def __init__(self,parent=None):
        super(ComboxDemo,self).__init__(parent)
        self.setupUi(self)
        self.setWindowTitle("ComBox例子")

        # 重新调整窗口的大小
        self.resize(400,400)
        layout = QVBoxLayout()

        # 获取界面文件里面的label
        self.lb1 = self.label
        # 获取界面文件里面的comboBox
        self.cb = self.comboBox
        # 添加单个选项
        self.cb.addItem("C")
        self.cb.addItem(("C++"))
        # 添加多个选项
        self.cb.addItems(["Java", "C#", "Python"])
        # 当下拉列表框中的选项发生改变时将发射currentIndexChanged信号,连接到自定义的槽函数selectionchange()
        self.cb.currentIndexChanged.connect(self.selectionchange)
        layout.addWidget(self.cb)
        layout.addWidget(self.lb1)
        self.setLayout(layout)

    # 在方法中,当选中下拉列表框中的一个选项时,将把该项的文本设置为标签的文本,并调整标签的大小
    def selectionchange(self, i):
        self.lb1.setText(self.cb.currentText())
        print("Items in the list are :")
        for count in range(self.cb.count()):
            print('item' + str(count) + '=' + self.cb.itemText(count))
            print("Current index", i, "selextion changed", self.cb.currentText())


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

在这里插入图片描述

3. QPushButton按钮

界面文件代码

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

# Form implementation generated from reading ui file 'QPushButton.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(120, 40, 92, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(120, 80, 92, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(Dialog)
        self.pushButton_3.setGeometry(QtCore.QRect(120, 120, 92, 28))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(Dialog)
        self.pushButton_4.setGeometry(QtCore.QRect(120, 160, 92, 28))
        self.pushButton_4.setObjectName("pushButton_4")

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "Button1"))
        self.pushButton_2.setText(_translate("Dialog", "image"))
        self.pushButton_3.setText(_translate("Dialog", "Disabled"))
        self.pushButton_4.setText(_translate("Dialog", "& Download"))

逻辑文件代码

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from QPushButton import *


'''
逻辑文件--业务文件,实现界面与逻辑的分离,该文件继承了界面文件的主窗口类
'''
# 创建一个类使用QPushButton按钮---创建了btn1、btn2、btn3和btn4四个按钮,这四个QpushButton对象被
# 定义为类的实例变量,每个按钮都将clicked信号发送给指定的槽函数,以响应按钮点击事件。
class Form(QDialog,Ui_Dialog):
    def __init__(self,parent=None):
        super(Form,self).__init__(parent)
        self.setupUi(self)
        layout = QVBoxLayout()

        # 第1个按钮btn1,通过toggle()函数来切换按钮状态
        self.btn1 = self.pushButton
        # 设置按钮是否已经被选中,如果设置为True,则表示按钮将保持已点击和释放状态
        self.btn1.setCheckable(True)
        # 在按钮专题之间进行切换
        self.btn1.toggle()
        # 通过lambda的方式来传递额外的参数btn1,将clicked信号发送给槽函数whichbtn()
        self.btn1.clicked.connect(lambda :self.whichbtn(self.btn1))
        # 当点击这个按钮时,将clicked信号发送给槽函数btnstate(),通过btn.isChecked来获得按钮是否被点击或释放的状态。
        self.btn1.clicked.connect(self.btnstate)
        layout.addWidget(self.btn1)

        self.btn2 = self.pushButton_2
        # 第2个按钮btn2,上面显示一个图标。用setIcon()方法接收一个QPixmap对象的图像文件作为输入参数
        self.btn2.setIcon(QIcon(QPixmap("./images/python.png")))
        self.btn2.clicked.connect(lambda :self.whichbtn(self.btn2))
        layout.addWidget(self.btn2)
        self.setLayout(layout)

        self.btn3 = self.pushButton_3
        # 第3个按钮btn3,使用setEnabled()方法来禁用btn3按钮
        self.btn3.setEnabled(False)
        layout.addWidget(self.btn3)

        self.btn4 = self.pushButton_4
        # 第4个按钮btn4,使用setDefault()方法来设置按钮的默认状态。快捷键是“&Download”,通过“ALT+D”快捷键来调用槽函数。
        self.btn4.setDefault(True)
        self.btn4.clicked.connect(lambda :self.whichbtn(self.btn4))
        layout.addWidget(self.btn4)

        self.setWindowTitle("Button demo")

    def btnstate(self):
        if self.btn1.isChecked():
            print("button pressed")
        else:
            print("button released")

    def whichbtn(self,btn):
        print("clicked button is " + btn.text())

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

结果展示:
在这里插入图片描述

4. QMessageBox

界面文件代码

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

# Form implementation generated from reading ui file 'QMessageBox.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(150, 110, 92, 28))
        self.pushButton.setObjectName("pushButton")

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

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

逻辑文件代码

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

from QMessageBox import Ui_Form

class Mywindow(QWidget,Ui_Form):
    def __init__(self,parent=None):
        super(Mywindow, self).__init__(parent)
        self.setupUi(self)
        self.setWindowTitle("QMessageBox例子")
        self.resize(300,100)
        myButton = self.pushButton
        myButton.setText("点击弹出消息框")
        myButton.clicked.connect(self.msg)

    def msg(self):
        reply = QMessageBox.warning(self,"标题","消息正文",QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)
        print(reply)

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

运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值