编写一个计算复利的对话框应用程序。做好的效果如下图

先上代码,然后讲解。

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *class interest(QDialog):def __init__(self,parent=None):super(interest,self).__init__(parent)PrincipalLabel  =   QLabel("&Princinpal:")self.PrincipalDoublespinBox  =   QDoubleSpinBox()self.PrincipalDoublespinBox.setRange(0,10000)   #set rangeself.PrincipalDoublespinBox.setValue(0) #set valueself.PrincipalDoublespinBox.setPrefix("$")  #set PrefixPrincipalLabel.setBuddy(self.PrincipalDoublespinBox)# the first paragraph
RateLabel   =   QLabel("&Rate:")self.RateDoublespinBox   =   QDoubleSpinBox()self.RateDoublespinBox.setRange(0,100)self.RateDoublespinBox.setValue(0)self.RateDoublespinBox.setSuffix('%')   #set suffixRateLabel.setBuddy(self.RateDoublespinBox)    #the second paragraph
self.list={"1years":1,"2years":2,"3years":3,"4years":4,"5years":5}      #create a dictitem    =   sorted(self.list.keys())YearsLabel  =   QLabel("&Years:")self.YearsComboBox  =   QComboBox()self.YearsComboBox.addItems(item)   #get the keys of  list,set items of ComboBoxYearsLabel.setBuddy(self.YearsComboBox)   #the third paragraphAmountTextLabel =   QLabel("Amount")self.AmountNumLabel  =   QLabel("0")  #the fourth paragraphlayout  =   QGridLayout()layout.addWidget(PrincipalLabel,0,0)layout.addWidget(self.PrincipalDoublespinBox,0,1)layout.addWidget(RateLabel,1,0)layout.addWidget(self.RateDoublespinBox,1,1)layout.addWidget(YearsLabel,2,0)layout.addWidget(self.YearsComboBox,2,1)layout.addWidget(AmountTextLabel,3,0)layout.addWidget(self.AmountNumLabel,3,1)self.setLayout(layout)  #set the layout   the fifth paragraph
self.connect(self.RateDoublespinBox,SIGNAL("valueChanged(double)"),self.updateUi)  #value of DoublespinBoxself.connect(self.PrincipalDoublespinBox,SIGNAL("valueChanged(double)"),self.updateUi)  #value of DoublespinBox,the type must be correct,or else can't connectself.connect(self.YearsComboBox,SIGNAL("currentIndexChanged(int)"),self.updateUi)  #the index value,is numbers:0,1,2,3,4,and also take care of the signalself.setWindowTitle("compound interest")  #the sixth paragraphdef updateUi(self):principal   =   self.PrincipalDoublespinBox.value() #get the value with the function of "value()"rate  =   self.RateDoublespinBox.value()years   =   unicode(self.YearsComboBox.currentText())   #get the Text of the "text ComboBox" with the function of "currentText()"amount  =   principal*((1+(rate/100.0))**self.list[years])self.AmountNumLabel.setText(unicode(amount))    #setText_function,Qstring argument    #the seventh paragraphapp =   QApplication(sys.argv)
computer    =   interest()
computer.show()
app.exec_() #the eighth paragraph
开始讲解框架
第一段:首先我们生成了一个名为“Princinpal”的标签,然后我们又生成了一个“double类型‘的选值框,并给这个选值框设定了它的范围0~100和初始值0,以及前缀”$“符号。
第二段:大部分操作和第一段相同,只是生成了后缀“%”符号。
第三段:第三段就有一点小不同了,因为第三段的操作对象是组合框(ComboBox)。所以我们先初始化了一个字典,然后设置标签,并将字典的键名排序后赋给组合框。
第四段:太简单,不讲了。
第五段:控件都设置好以后就开始布局。我们这里用的是网格(grid)布局。addwidget函数的详细就放到后面函数讲解那一部分吧。
第六段:设置信号和槽,并设置窗体的标题。
第七段:槽函数的实现
第八段:没啥好讲的
函数讲解
就按顺序来,先从第一段开始吧。
setrange()设置选值框的范围,setvalue()设置选值框的初始值,setPrefix()设置选值框的前缀,setBuddy()设置伙伴关系,这些看字面意思都很好懂,关键的就是呢要知道它是和哪个部件联系在一起的。另外呢,就是它们有什么作用,setBuddy有什么作用呢???诶,你刚刚不是讲了吗,这个是设置伙伴关系,可是设置伙伴关系又有什么作用呢??? 哎,这个就是我们要弄懂的。这个就与“PrincipalLabel  =   QLabel("&Princinpal:")“这句话里面的&有关系了,当标签里面放入一个与字符”&“时,会有两种含义:①当标签有伙伴关系时候,紧跟在与字符后面的字符会显示下划线,形成加速键,并与字符不显示出来。②单纯的字符,会显示出来。
当与字符’&‘放在多个按钮里面或者单选按钮和checkBox里面会怎样呢??自己查资料呗,我懒得敲了
后面几段都没有什么好讲的,不过addWidget()需要注意一下,它后面先跟一个QWidget类的对象,然后后面可以跟四个参数,第一个参数表示该Widget对象所在网格的行的序号,(从0开始算),第二个参数就是列的序号,第三个第四个参数表示合并的行和列数,可以不要。
注意啊,这个setlayout函数不能掉,我的理解就是它相当于设置了一个布局管理器吧,没有它,那么之前设置的布局和控件都不会显示出来。(没有查参考资料,个人想法)
其实最有意思的应该是信号的发射了,首先你得知道一个部件有哪些预定的信号吧,(你也可以自己定义一个信号,不过有现成的信号不如偷懒呗),
据查资料所得,像选值框的信号发射就是valueChanged,不过它所传递的参数有两种:int和QString。我在这个程序里面试了一下,好像两种都可以,
像组合框的话就,当ComboBox的当前值改变时可以发出两个信号(currentIndexChanged和activated)。不管是否在程序中预先设定或存在用户交互,currentIndexChanged总会被激发,而activated只有在存在用户交互的时候才会被激发。highlighted信号当用户点亮comboBox下拉菜单时被激发。这三种信号都存在QString和int两个版本。如果用户选择或点击一个pixmap,只有int信号会被激发。在我这个程序里,我把int和QString分别试了一下,都可以。
后面我会讲一下创建字典的几种方式。
这篇文字也是我写下来激励自己继续学下去并记录自己的学习轨迹的,也希望共勉。以下是我下这篇文字参考的一些资料。
Qt中QComboBox类常见函数与信号的使用:http://blog.csdn.net/sbisyju/article/details/8697081
Qt之QSpinBox和QDoubleSpinBox:https://yq.aliyun.com/articles/62095
大家有兴趣就自己看看吧,后面一篇文章内容丰富详细。


PyQT4编程实例之小财务软件相关推荐

  1. 小企业财务软件哪个最好用,该如何选择?

    市面上的财务软件分类众多,单看品牌都看得眼花缭乱,对于小企业来说,财务软件哪个最好用?又该如何选择一款合适自己的财务软件呢?可以从这三点来选择. 1.可信赖的服务项目分销商和映像的财务软件 图为简道云 ...

  2. 兴旺小企业财务软件 v2.0 官方

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  3. 财务管控轻松搞定:适合小企业的财务软件推荐!

    小企业总是在寻找改善运营和保持竞争力的方法.他们可以做出重大改进的一个关键领域是他们的财务管理.通过实施财务软件,小企业主可以简化他们的会计流程,节省时间和金钱,并提高准确性. 小企业财务软件的好处 ...

  4. 全栈工程师15年经验分享:40个改变编程技能的小技巧

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 编程如何节省更多的时间,犯更少的错误? 最近,这样一份「心得」火了.这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文 ...

  5. 15年经验分享:40个改变编程技能的小技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 编程如何节省更多的时间,犯更少的错误 ...

  6. modbus通讯协议编程实例_三菱PLC CC-LINK通讯编程实例分享,看完你就会了

    前言:小蓝上次分享了三菱PLC编程指令文章,有一位粉丝说还有标签,FB模块,以太网通讯,MODBUS,TCP通讯这些有的学的.所以今天就给大家带来CC-LINK通讯编程实例.如果看完还是不太明白怎么办 ...

  7. LiteOS通信模组教程05-LiteOS的SAL及socket编程实例

    1. SAL套接字抽象层 SAL全称Socket Abstract Layer,即套接字抽象层,主要作用是对上层应用提供一层统一的 socket 编程接口,屏蔽底层网络硬件的差异. LiteOS的SA ...

  8. 058_《突破Delphi7.0编程实例五十讲》

    <突破Delphi7.0编程实例五十讲> Delphi 教程 系列书籍 (058) <突破Delphi7.0编程实例五十讲> 网友(邦)整理 EMail: shuaihj@16 ...

  9. 40个提升自己编程能力的小技巧

    40 个改变编程技能的小技巧 1.将大块代码分解成小函数 2.今日事今日毕,如果没毕,就留到明天. 如果下班之前还没有解决的问题,那么你需要做的,就是关闭电脑,把它留到明天. 中途不要再想着问题了! ...

最新文章

  1. 网页制作-表单元素2
  2. LIstview滑动时不加载图片,停止时加载!
  3. 概率编程库Pymc3案例之神经网络(批量训练)
  4. NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量
  5. 4.0.13 mysql 注入_Windows2000下整合Mysql4.0.13与Tomcat4.1.24搭建Jsp环境
  6. 【Python生成readme文件】——Markdown语法
  7. python django部署docker_centos利用docker部署django项目
  8. Python读写txt
  9. php更改txt文件,如何使用php对txt文件进行修改
  10. apt编译java_自动生成代码工具--APT
  11. .vue文件怎么使用_手机技巧:被人忽视OTG功能怎么使用?复制文件到U盘的新方法...
  12. android后厨打印机漏单,后厨打印丢单解决方案
  13. OI生涯回忆录(Part8:至高一省选Day1)
  14. 数据挖掘与数据分析项目链家租房数据(一)数据爬虫
  15. python写android的App(kivy框架)的实践(1)
  16. Web(七)CSS页面布局-网页布局页面的制作
  17. gps wifi信号测试软件,搜星+WiFi+EMI 导航平板信号性能横评
  18. autojs查找图片相似轮廓
  19. layer打开iframe弹层,传递与接收参数
  20. 乐山市计算机学校蔡老师,各展所长,切磋琢磨——乐山市计算机学校召开班主任经验交流会...

热门文章

  1. 【学习笔记】智能制造之精益思想
  2. 【总结】MTO/MTS操作步骤及月末结算
  3. 【超级实用】程序添加后台执行的选项
  4. 客户信贷应收总额相关
  5. 新技术让SAP HANA向“通用”平台迈进
  6. BCS和ECCS等合并系统简单对比
  7. OO实现ALV TABLE 三:ALV的功能设计
  8. AgilePoint商业流程管理平台
  9. 澳优、伊利、君乐宝、贝因美等入局,羊奶能否迎来“牛市”?
  10. 回顾国产手机4年沉浮,仍然只是靠这三招翻身