侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python3+PyQt5+Qt Designer实现堆叠窗口部件

Python  /  管理员 发布于 7年前   225

本文是对《Python Qt GUI快速编程》的第9章的堆叠窗口例子Vehicle Rental用Python3+PyQt5+Qt Designer进行改写。

第一部分无借用Qt Designer,完全用代码实现。
第二部分则借用Qt Designer,快速实现。

第一部分:

import sysfrom PyQt5.QtCore import (Qt)from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog, QDialogButtonBox, QFrame, QGridLayout, QHBoxLayout, QLabel, QSpinBox, QStackedWidget, QVBoxLayout, QWidget)class VehicleRentalDlg(QDialog): def __init__(self, parent=None): super(VehicleRentalDlg, self).__init__(parent) vehicleLabel = QLabel("&Vehicle Type:") self.vehicleComboBox = QComboBox() vehicleLabel.setBuddy(self.vehicleComboBox) self.vehicleComboBox.addItems(["Car", "Van"]) colorLabel = QLabel("Co&lor:") self.colorComboBox = QComboBox() colorLabel.setBuddy(self.colorComboBox) self.colorComboBox.addItems(["Black", "Blue", "Green", "Red",  "Silver", "White", "Yellow"]) seatsLabel = QLabel("&Seats:") self.seatsSpinBox = QSpinBox() seatsLabel.setBuddy(self.seatsSpinBox) self.seatsSpinBox.setRange(2, 12) self.seatsSpinBox.setValue(4) self.seatsSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter) weightLabel = QLabel("&Weight:") self.weightSpinBox = QSpinBox() weightLabel.setBuddy(self.weightSpinBox) self.weightSpinBox.setRange(1, 8) self.weightSpinBox.setValue(1) self.weightSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter) self.weightSpinBox.setSuffix(" tons") volumeLabel = QLabel("Volu&me") self.volumeSpinBox = QSpinBox() volumeLabel.setBuddy(self.volumeSpinBox) self.volumeSpinBox.setRange(4, 22) self.volumeSpinBox.setValue(10) self.volumeSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter) self.volumeSpinBox.setSuffix(" cu m") mileageLabel = QLabel("Max. Mileage") self.mileageLabel = QLabel("1000 miles") self.mileageLabel.setAlignment(Qt.AlignRight|Qt.AlignVCenter) self.mileageLabel.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|  QDialogButtonBox.Cancel) self.stackedWidget = QStackedWidget() carWidget = QWidget() carLayout = QGridLayout() carLayout.addWidget(colorLabel, 0, 0) carLayout.addWidget(self.colorComboBox, 0, 1) carLayout.addWidget(seatsLabel, 1, 0) carLayout.addWidget(self.seatsSpinBox, 1, 1) carWidget.setLayout(carLayout) self.stackedWidget.addWidget(carWidget) vanWidget = QWidget() vanLayout = QGridLayout() vanLayout.addWidget(weightLabel, 0, 0) vanLayout.addWidget(self.weightSpinBox, 0, 1) vanLayout.addWidget(volumeLabel, 1, 0) vanLayout.addWidget(self.volumeSpinBox, 1, 1) vanWidget.setLayout(vanLayout) self.stackedWidget.addWidget(vanWidget) topLayout = QHBoxLayout() topLayout.addWidget(vehicleLabel) topLayout.addWidget(self.vehicleComboBox) bottomLayout = QHBoxLayout() bottomLayout.addWidget(mileageLabel) bottomLayout.addWidget(self.mileageLabel) layout = QVBoxLayout() layout.addLayout(topLayout) layout.addWidget(self.stackedWidget) layout.addLayout(bottomLayout) layout.addWidget(self.buttonBox) self.setLayout(layout) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.vehicleComboBox.currentIndexChanged[str].connect(self.setWidgetStack) self.weightSpinBox.valueChanged[int].connect(self.weightChanged) self.setWindowTitle("Vehicle Rental") def setWidgetStack(self, text): if text == "Car": self.stackedWidget.setCurrentIndex(0) self.mileageLabel.setText("1000 miles") else: self.stackedWidget.setCurrentIndex(1) self.weightChanged(self.weightSpinBox.value()) def weightChanged(self, amount): self.mileageLabel.setText("{0} miles".format(8000 / amount))app = QApplication(sys.argv)form = VehicleRentalDlg()form.show()app.exec_()

第二部分:
/home/yrd/eric_workspace/Vehicle/Ui_vehiclerentaldlg.py

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file '/home/yrd/eric_workspace/Vehicle/vehiclerentaldlg.ui'## Created by: PyQt5 UI code generator 5.7## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_VehicleRentalDlg(object): def setupUi(self, VehicleRentalDlg): VehicleRentalDlg.setObjectName("VehicleRentalDlg") VehicleRentalDlg.resize(206, 246) self.gridlayout = QtWidgets.QGridLayout(VehicleRentalDlg) self.gridlayout.setContentsMargins(9, 9, 9, 9) self.gridlayout.setSpacing(6) self.gridlayout.setObjectName("gridlayout") self.buttonBox = QtWidgets.QDialogButtonBox(VehicleRentalDlg) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.gridlayout.addWidget(self.buttonBox, 4, 0, 1, 1) spacerItem = QtWidgets.QSpacerItem(188, 16, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridlayout.addItem(spacerItem, 3, 0, 1, 1) self.hboxlayout = QtWidgets.QHBoxLayout() self.hboxlayout.setContentsMargins(0, 0, 0, 0) self.hboxlayout.setSpacing(6) self.hboxlayout.setObjectName("hboxlayout") self.label_6 = QtWidgets.QLabel(VehicleRentalDlg) self.label_6.setObjectName("label_6") self.hboxlayout.addWidget(self.label_6) self.mileageLabel = QtWidgets.QLabel(VehicleRentalDlg) self.mileageLabel.setFrameShape(QtWidgets.QFrame.StyledPanel) self.mileageLabel.setFrameShadow(QtWidgets.QFrame.Sunken) self.mileageLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.mileageLabel.setObjectName("mileageLabel") self.hboxlayout.addWidget(self.mileageLabel) self.gridlayout.addLayout(self.hboxlayout, 2, 0, 1, 1) self.stackedWidget = QtWidgets.QStackedWidget(VehicleRentalDlg) self.stackedWidget.setObjectName("stackedWidget") self.page_2 = QtWidgets.QWidget() self.page_2.setObjectName("page_2") self.gridlayout1 = QtWidgets.QGridLayout(self.page_2) self.gridlayout1.setContentsMargins(9, 9, 9, 9) self.gridlayout1.setSpacing(6) self.gridlayout1.setObjectName("gridlayout1") self.colorComboBox = QtWidgets.QComboBox(self.page_2) self.colorComboBox.setObjectName("colorComboBox") self.colorComboBox.addItem("") self.colorComboBox.addItem("") self.colorComboBox.addItem("") self.colorComboBox.addItem("") self.colorComboBox.addItem("") self.colorComboBox.addItem("") self.colorComboBox.addItem("") self.gridlayout1.addWidget(self.colorComboBox, 0, 1, 1, 1) self.label_4 = QtWidgets.QLabel(self.page_2) self.label_4.setObjectName("label_4") self.gridlayout1.addWidget(self.label_4, 0, 0, 1, 1) self.label_5 = QtWidgets.QLabel(self.page_2) self.label_5.setObjectName("label_5") self.gridlayout1.addWidget(self.label_5, 1, 0, 1, 1) self.seatsSpinBox = QtWidgets.QSpinBox(self.page_2) self.seatsSpinBox.setAlignment(QtCore.Qt.AlignRight) self.seatsSpinBox.setMinimum(2) self.seatsSpinBox.setMaximum(12) self.seatsSpinBox.setProperty("value", 4) self.seatsSpinBox.setObjectName("seatsSpinBox") self.gridlayout1.addWidget(self.seatsSpinBox, 1, 1, 1, 1) self.stackedWidget.addWidget(self.page_2) self.page = QtWidgets.QWidget() self.page.setObjectName("page") self.gridlayout2 = QtWidgets.QGridLayout(self.page) self.gridlayout2.setContentsMargins(9, 9, 9, 9) self.gridlayout2.setSpacing(6) self.gridlayout2.setObjectName("gridlayout2") self.weightSpinBox = QtWidgets.QSpinBox(self.page) self.weightSpinBox.setAlignment(QtCore.Qt.AlignRight) self.weightSpinBox.setMinimum(1) self.weightSpinBox.setMaximum(8) self.weightSpinBox.setObjectName("weightSpinBox") self.gridlayout2.addWidget(self.weightSpinBox, 0, 1, 1, 1) self.label_3 = QtWidgets.QLabel(self.page) self.label_3.setObjectName("label_3") self.gridlayout2.addWidget(self.label_3, 1, 0, 1, 1) self.label_2 = QtWidgets.QLabel(self.page) self.label_2.setObjectName("label_2") self.gridlayout2.addWidget(self.label_2, 0, 0, 1, 1) self.volumeSpinBox = QtWidgets.QSpinBox(self.page) self.volumeSpinBox.setAlignment(QtCore.Qt.AlignRight) self.volumeSpinBox.setMinimum(4) self.volumeSpinBox.setMaximum(22) self.volumeSpinBox.setProperty("value", 10) self.volumeSpinBox.setObjectName("volumeSpinBox") self.gridlayout2.addWidget(self.volumeSpinBox, 1, 1, 1, 1) self.stackedWidget.addWidget(self.page) self.gridlayout.addWidget(self.stackedWidget, 1, 0, 1, 1) self.hboxlayout1 = QtWidgets.QHBoxLayout() self.hboxlayout1.setContentsMargins(0, 0, 0, 0) self.hboxlayout1.setSpacing(6) self.hboxlayout1.setObjectName("hboxlayout1") self.label = QtWidgets.QLabel(VehicleRentalDlg) self.label.setObjectName("label") self.hboxlayout1.addWidget(self.label) self.vehicleComboBox = QtWidgets.QComboBox(VehicleRentalDlg) self.vehicleComboBox.setObjectName("vehicleComboBox") self.vehicleComboBox.addItem("") self.vehicleComboBox.addItem("") self.hboxlayout1.addWidget(self.vehicleComboBox) self.gridlayout.addLayout(self.hboxlayout1, 0, 0, 1, 1) self.label_4.setBuddy(self.colorComboBox) self.label_5.setBuddy(self.seatsSpinBox) self.label_3.setBuddy(self.volumeSpinBox) self.label_2.setBuddy(self.seatsSpinBox) self.label.setBuddy(self.vehicleComboBox) self.retranslateUi(VehicleRentalDlg) self.stackedWidget.setCurrentIndex(0) self.vehicleComboBox.currentIndexChanged['int'].connect(self.stackedWidget.setCurrentIndex) self.buttonBox.accepted.connect(VehicleRentalDlg.accept) self.buttonBox.rejected.connect(VehicleRentalDlg.reject) QtCore.QMetaObject.connectSlotsByName(VehicleRentalDlg) def retranslateUi(self, VehicleRentalDlg): _translate = QtCore.QCoreApplication.translate VehicleRentalDlg.setWindowTitle(_translate("VehicleRentalDlg", "Vehicle Rental")) self.label_6.setText(_translate("VehicleRentalDlg", "Max. Mileage:")) self.mileageLabel.setText(_translate("VehicleRentalDlg", "1000 miles")) self.colorComboBox.setItemText(0, _translate("VehicleRentalDlg", "Black")) self.colorComboBox.setItemText(1, _translate("VehicleRentalDlg", "Blue")) self.colorComboBox.setItemText(2, _translate("VehicleRentalDlg", "Green")) self.colorComboBox.setItemText(3, _translate("VehicleRentalDlg", "Red")) self.colorComboBox.setItemText(4, _translate("VehicleRentalDlg", "Silver")) self.colorComboBox.setItemText(5, _translate("VehicleRentalDlg", "White")) self.colorComboBox.setItemText(6, _translate("VehicleRentalDlg", "Yellow")) self.label_4.setText(_translate("VehicleRentalDlg", "Co&lor:")) self.label_5.setText(_translate("VehicleRentalDlg", "&Seats:")) self.weightSpinBox.setSuffix(_translate("VehicleRentalDlg", " tons")) self.label_3.setText(_translate("VehicleRentalDlg", "Volu&me:")) self.label_2.setText(_translate("VehicleRentalDlg", "&Weight:")) self.volumeSpinBox.setSuffix(_translate("VehicleRentalDlg", " cu m")) self.label.setText(_translate("VehicleRentalDlg", "&Vehicle Type:")) self.vehicleComboBox.setItemText(0, _translate("VehicleRentalDlg", "Car")) self.vehicleComboBox.setItemText(1, _translate("VehicleRentalDlg", "Van"))

/home/yrd/eric_workspace/Vehicle/vehiclerentaldlg.py

# -*- coding: utf-8 -*-"""Module implementing VehicleRentalDlg."""import sysfrom PyQt5.QtCore import pyqtSlotfrom PyQt5.QtWidgets import QDialog,QApplicationfrom Ui_vehiclerentaldlg import Ui_VehicleRentalDlgclass VehicleRentalDlg(QDialog, Ui_VehicleRentalDlg): """ Class documentation goes here. """ def __init__(self, parent=None): """ Constructor @param parent reference to the parent widget @type QWidget """ super(VehicleRentalDlg, self).__init__(parent) self.setupUi(self) self.vehicleComboBox.setFocus() @pyqtSlot(int) def on_weightSpinBox_valueChanged(self, amount): self.mileageLabel.setText("{0} miles".format(8000 / amount)) @pyqtSlot(str) def on_vehicleComboBox_currentIndexChanged(self, text): if text == "Car": self.mileageLabel.setText("1000 miles") else: self.on_weightSpinBox_valueChanged( self.weightSpinBox.value()) if __name__ == "__main__": app = QApplication(sys.argv) form = VehicleRentalDlg()  form.show() app.exec_()

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Python在groupby分组后提取指定位置记录方法
    下一条:
    python3 pandas 读取MySQL数据和插入的实例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客