PyQt5 + QtDesigner 复刻 Windows 计算器 (二)
目标
画一个 <standard> 计算器草稿,并实现相关的基本功能
QtDesigner 画 <standard> 草稿 UI
用 QtDesigner 打开 calculator.ui,先在主窗口中插入 24 个 Pushbutton
![]() |
将 Pushbutton 上的 text 分别改名,同时按照功能修改每个 button 对应的对象名字。
|
选中所有按钮,点击工具栏中的栅格布局。选中所有按钮,将 sizePolicy 中的 “垂直策略” 设置为 preferred。调整栅格到合适大小。
![]() |
![]() |
![]() |
再次拖拽 6 个 pushButton 到 mainWindow,分别命名为 mcButton, mrButton, maddButton, mminusButton, msButton, mlistButton。然后选中这 6 个按钮,点击工具栏中的水平布局,同时调整布局到合适大小。再次选中这 6 个按钮,将 QPushbutton 属性设置为 Flat。
![]() |
![]() |
![]() |
将 mainWindow 的 menubar 和 statusbar 删除
![]() |
在 mainWindow 中插入三个 pushButton 和一个 label。并用同样的方法设置水平布局。
![]() |
控件名称分别命名为 menuButton, modeLabel, topButton, historyButton。同时在 top 和 history 按钮中间插入一个 Horizontal Spacer。将以上 5 个控件的水平策略设置为 Fixed。同时调整 Horizontal Spacer 的长度到合适的数值。
![]() |
![]() |
在 mainWindow 中插入一个 lineEdit,命名为 digitDisplay。再插入第二个 lineEdit,命名为 digitUpDisplay:
![]() |
![]() |
在 mainWindow 中插入一个 QStackedWidget,并将 第一个 page 命名为 pageStd,第二个 page 命名为 pageProg。这一步是为了方便实现计算器切换 standard / programmer 模式。将刚刚画好的 standard 相关的视图拖拽到 pageStd 中 (即 除了 menu 栏之外的组件)。
![]() |
![]() |
点击 centralWidget,将其设置为垂直布局:
![]() |
选择 pageStd,将 Layout 中的所有 Margin 设置为0,将 layoutStretch 设置为 0,2,1,9:
![]() |
选择 centralWidget,将 layoutStretch 改为 1,12:
![]() |
最后,将 mainWindow 最小 size 改为 470*700:
![]() |
现在 standard 计算器 UI 的草稿就完成了。生成 UI 对应的 py 文件并运行主程序:
pyuic5.exe -o ui_calculator.py calculator.uipython ./calculator.py
运行结果:
![]() |
功能实现放到下一篇吧.. UI 源码贴在下面。复制之后保存为 .ui 文件就可以用了。
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>470</width><height>700</height></rect></property><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="Preferred"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="minimumSize"><size><width>470</width><height>700</height></size></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="Fixed"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>16777215</height></size></property><property name="layoutDirection"><enum>Qt::LeftToRight</enum></property><layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,12"><item><layout class="QHBoxLayout" name="horizontalLayout_2"><item><widget class="QPushButton" name="menuButton"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="Minimum"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>40</height></size></property><property name="text"><string>menu</string></property></widget></item><item><widget class="QLabel" name="modeLabel"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="Minimum"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>40</height></size></property><property name="text"><string>Standard</string></property></widget></item><item><widget class="QPushButton" name="topButton"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="Minimum"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>40</height></size></property><property name="text"><string>top</string></property></widget></item><item><spacer name="horizontalSpacer"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="Minimum"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>40</height></size></property><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeType"><enum>QSizePolicy::Preferred</enum></property><property name="sizeHint" stdset="0"><size><width>400</width><height>17</height></size></property></spacer></item><item><widget class="QPushButton" name="historyButton"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="Minimum"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>40</height></size></property><property name="text"><string>history</string></property></widget></item></layout></item><item><widget class="QStackedWidget" name="calcModeView"><property name="currentIndex"><number>0</number></property><widget class="QWidget" name="pageStd"><layout class="QVBoxLayout" name="verticalLayout" stretch="0,2,1,9"><property name="spacing"><number>0</number></property><property name="leftMargin"><number>0</number></property><property name="topMargin"><number>0</number></property><property name="rightMargin"><number>0</number></property><property name="bottomMargin"><number>0</number></property><item><widget class="QLineEdit" name="digitUpDisplay"/></item><item><widget class="QLineEdit" name="digitDisplay"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property></widget></item><item><layout class="QHBoxLayout" name="horizontalLayout_3"><property name="spacing"><number>0</number></property><property name="sizeConstraint"><enum>QLayout::SetMinimumSize</enum></property><property name="leftMargin"><number>0</number></property><property name="topMargin"><number>9</number></property><item><widget class="QPushButton" name="mcButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>16777215</height></size></property><property name="text"><string>MC</string></property><property name="flat"><bool>true</bool></property></widget></item><item><widget class="QPushButton" name="mrButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>16777215</height></size></property><property name="text"><string>MR</string></property><property name="flat"><bool>true</bool></property></widget></item><item><widget class="QPushButton" name="maddButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>16777215</height></size></property><property name="text"><string>M+</string></property><property name="flat"><bool>true</bool></property></widget></item><item><widget class="QPushButton" name="mminusButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>16777215</height></size></property><property name="text"><string>M-</string></property><property name="flat"><bool>true</bool></property></widget></item><item><widget class="QPushButton" name="mlistButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>16777215</height></size></property><property name="text"><string>Mlist</string></property><property name="flat"><bool>true</bool></property></widget></item><item><widget class="QPushButton" name="msButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="maximumSize"><size><width>16777215</width><height>16777215</height></size></property><property name="text"><string>MS</string></property><property name="flat"><bool>true</bool></property></widget></item></layout></item><item><layout class="QGridLayout" name="gridLayout_2"><item row="0" column="1"><widget class="QPushButton" name="ceButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>CE</string></property></widget></item><item row="3" column="1"><widget class="QPushButton" name="fiveButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>5</string></property></widget></item><item row="2" column="1"><widget class="QPushButton" name="eightButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>8</string></property></widget></item><item row="0" column="0"><widget class="QPushButton" name="percentButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>%</string></property></widget></item><item row="2" column="0"><widget class="QPushButton" name="sevenButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>7</string></property></widget></item><item row="3" column="2"><widget class="QPushButton" name="sixButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>6</string></property></widget></item><item row="0" column="3"><widget class="QPushButton" name="delButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>del</string></property></widget></item><item row="1" column="3"><widget class="QPushButton" name="devButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>/</string></property></widget></item><item row="5" column="3"><widget class="QPushButton" name="equalButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>=</string></property></widget></item><item row="3" column="3"><widget class="QPushButton" name="minusButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>-</string></property></widget></item><item row="1" column="0"><widget class="QPushButton" name="invButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>1/x</string></property></widget></item><item row="5" column="2"><widget class="QPushButton" name="dotButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>.</string></property></widget></item><item row="4" column="1"><widget class="QPushButton" name="twoButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>2</string></property></widget></item><item row="4" column="2"><widget class="QPushButton" name="threeButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>3</string></property></widget></item><item row="2" column="3"><widget class="QPushButton" name="mulButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>*</string></property></widget></item><item row="1" column="1"><widget class="QPushButton" name="squareButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>x^2</string></property></widget></item><item row="2" column="2"><widget class="QPushButton" name="nineButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>9</string></property></widget></item><item row="1" column="2"><widget class="QPushButton" name="sqrtButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>sqrt(x)</string></property></widget></item><item row="5" column="0"><widget class="QPushButton" name="revButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>+/-</string></property></widget></item><item row="0" column="2"><widget class="QPushButton" name="cButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>C</string></property></widget></item><item row="5" column="1"><widget class="QPushButton" name="zeroButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>0</string></property></widget></item><item row="4" column="0"><widget class="QPushButton" name="oneButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>1</string></property></widget></item><item row="3" column="0"><widget class="QPushButton" name="fourButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>4</string></property></widget></item><item row="4" column="3"><widget class="QPushButton" name="addButton_2"><property name="sizePolicy"><sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"><horstretch>0</horstretch><verstretch>0</verstretch></sizepolicy></property><property name="text"><string>+</string></property></widget></item></layout></item></layout></widget><widget class="QWidget" name="pageProg"/></widget></item></layout></widget></widget><resources/><connections/>
</ui>
PyQt5 + QtDesigner 复刻 Windows 计算器 (二)相关推荐
- PyQt5 + QtDesigner 复刻 Windows 计算器 (一)
目的 尝试用 PyQt5 以及 QtDesigner 复刻一个 Windows 计算器,加强对 PyQt5 的学习与理解. 目标 尽可能还原 Win11 自带计算器,计划实现 <standard ...
- C++ 复刻Windows 10系统的Tripeaks游戏
Tripeaks介绍 Tripeaks--这个英文名不知道大家有否听说过(应该挺陌生的),这个游戏不知道大家有否了解尝试过. 其实Tripeaks这个游戏在Windows 10(企业版)系统下可能有出 ...
- MATLAB | 绘图复刻(二) | 折线图+误差棒+柱状图+散点抖动+灰色背景+图片叠加
看到gzh R语言ggplot2科研绘图发布了一篇绘图复刻类文章,复刻了: Nature(IF=49.962)文章(Gut microbiota modulates weight gain in mi ...
- 试着使用SDL2复刻曹操传(二)
本篇内容接上篇文章,继续讲述本人使用SDL2复刻曹操传的过程.上次主要实现创建窗口并显示背景图,今次将完善游戏窗口的基本功能,如最大化.拉伸.最小化.然后渲染英雄单位到地图上.为方便窗口的管理,创建G ...
- Bombermaaan-最好的开源炸弹人游戏(支持AI人机对战,SFC复刻版)
关键词:炸弹人源代码,炸弹人AI算法 目录 一.游戏截图 二.基本信息 三.游戏设计介绍 四.道具说明 五.下载 一.游戏截图 二.基本信息 语言:C++ 平台:Windows / Lin ...
- C语言初学者复刻经典扫雷小游戏(图形界面,非黑白窗口)(含源码)
注:除计时器和剩余雷数显示外,其他功能完美还原. 目录 一.程序演示 二.程序信息 1.基础信息 2.前言 3.所需文件 三.代码解析 1.头文件 2.变量声明 3.随机生成雷 4.生成雷位置矩阵 5 ...
- U^2-Net跨界肖像画,完美复刻人物细节,GitHub标星2.5K+
来源 | Jack Cui 头图 | CSDN下载自视觉中国 今年提出的 U^2-Net 显著性检测算法,刷爆了 reddit 和 twitter,号称是 2020 年「地表最强」的静态背景分割算法, ...
- GitHub 标星 2.5K+,U^2-Net 跨界肖像画,完美复刻人物细节!
来源 | Jack Cui 头图 | CSDN下载自视觉中国 今年提出的 U^2-Net 显著性检测算法,刷爆了 reddit 和 twitter,号称是 2020 年「地表最强」的静态背景分割算法, ...
- 无人配送的Nuro再融5亿美元,为啥中国复刻者们没它这么火
雷刚 发自 凹非寺 量子位 报道 | 公众号 QbitAI 复旦才俊朱佳俊的无人车公司Nuro.ai,又完成了新一轮融资. C轮次,5亿美元. 本轮融资由T. Rowe Price Associat ...
最新文章
- 三星二级菜单_你知道三星 Galaxy 手机中的这个隐藏菜单吗?
- smarty---设置
- 基于FPGA的DES加解密系统开发(5000字详细介绍欢迎订阅)
- 三维动画制作的基本流程
- Android得到一个闹钟在第三方
- 毕业这几年的嵌入式开发之路
- source insight 4.0 无法同步文件问题
- Jquery操作对控件的取值、赋值
- input标签与图片按钮水平对齐的解决方法
- IMP-00009: 导出文件异常结束 imp
- 计蒜客-最后一个单词的长度
- Git 和 Github的关系
- rtp h264注意点(FU-A分包方式说明)
- CNN LeNet-5 AlexNet VGG简介
- 如何查看JDK版本信息
- 江湖魔头-BugkuCTF平台
- 基于STC单片机串口扩展网络通信的应用
- docker部署jpress详细版本
- 目前国内的高频交易系统的延迟做到了什么水平?
- 固定在底部|锚定在底部
热门文章
- matlab隐函数画三维图,MATLAB绘制3D隐函数曲面的几种方法
- 贴片电阻简介:功率大小与尺寸对应表
- Aspose.Word企业案例:Charity Auction Organizer 使用 Aspose.Words 开发自定义邮件合并引擎
- ajax在加拿大什么位置,加国小常识 教你读懂加拿大地址邮编
- Linux常用命令(一) —— 开关机命令shutdown、远程登录命令ssh、远程拷贝文件命令scp
- 公众号暂停更新通知最新文案排版布局
- Vue中如何进行屏幕录制与直播推流
- matlab显示wav波形图,matlab 分析wav波形
- Python开发环境安装教程
- java在jvm虚拟机中是如何实现多态的?