在写这篇文章之前,xxx已经写过了几篇关于改输入对话框主题的文章,想要了解的朋友可以去翻一下之前的文章
天今做了个基于PyQt4的输入对话框.
在程序输入中,有时会要求同时变改多个参数值,而且类型也不尽相同,
这时面下的模块比拟完全的处理了这个题问.
先看个示例吧.比如我们有三个参数:
一个是a,要求输入的是数整(int),b要求输入浮点数(float),还有一个字符串c,
values={'a':100,'b':3.5,'c':'Strings'} title='QInputBox for Setting Values:' RValues=QInputBox(values,title) print(RValues) #~ {'a': 100, 'c': 'Strings', 'b': 3.5}
示显的面界如下:
QInputBox模块的码代如下:
#-*- coding:utf-8 -*- #~ #-------------------------------------------------------------------------------- #~ module:wlab #~ FileName=WPyQt4Input.py #~ Funciton:PyQt4的输入对话框 #~ author:吴徐平 #~ Date:2013-05-03 #~ Email:539688300@qq.com #~ #------------------------------------------------- import sys from PyQt4 import QtGui from PyQt4 import QtCore class QInputDialog(QtGui.QDialog): def __init__(self, values,title='Setting Values:',parent=None): ''' #~ >>>values={'String':'This is String','float':3.5,'int':15} #~ >>>title='QInputBox for Setting Values:' #~>>>dlg = QInputDialog(values=values,title=title) #~ >>>if ( dlg.exec_() == QtGui.QDialog.Accepted): RValues = dlg.GetModifiedValues() else: RValues = dlg.GetOriginValue() ''' QtGui.QDialog.__init__(self, parent=parent) self.setWindowTitle(title) self.OriginValues=values.copy() self.ModifiedValues=values.copy() self.vbox = QtGui.QVBoxLayout() cnt=0 for key in self.ModifiedValues: keyStr=str(key) label=keyStr+' :' KeyLabel=QtGui.QLabel(label) ValueLineEdit=QtGui.QLineEdit(str(self.ModifiedValues[key])) #~ #为件控设置一个名字,方便使用函数findchild()查找 ValueLineEdit.setObjectName('VLE'+str(cnt)) hbox = QtGui.QHBoxLayout() hbox.addWidget(KeyLabel) hbox.addWidget(ValueLineEdit) self.vbox.addLayout(hbox) cnt=cnt+1 self.btn_OK=QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok) self.btn_Cancel=QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Cancel) self.btn_OK.clicked.connect(self.accept ) self.btn_Cancel.clicked.connect(self.reject) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.btn_OK) hbox.addWidget(self.btn_Cancel) self.vbox.addLayout(hbox) self.setLayout(self.vbox) def GetOriginValue(self): ''' #~ if the user click btn_Cancel,then return OriginValues ''' return self.OriginValues def GetModifiedValues(self): ''' #~ if the user click btn_OK,then return self.ModifiedValues ''' cnt=0 for key in self.ModifiedValues: keyStr=str(key) VLEObjectName='VLE'+str(cnt) VLE=self.findChild((QtGui.QLineEdit, ),VLEObjectName) cnt=cnt+1 ovk=self.ModifiedValues[key] if(type(ovk)==int): self.ModifiedValues[key]=int(VLE.text()) elif(type(ovk)==float): self.ModifiedValues[key]=float(VLE.text()) else: self.ModifiedValues[key]=str(VLE.text()) return self.ModifiedValues #~ #封装好的参数输入对话框 def QInputBox(values,title='Setting Values:'): ''' #~ >>>values={'String':'This is String','float':3.5,'int':15} #~ >>>title='QInputBox for Setting Values:' #~ >>>print(QInputBox(values,title)) ''' app = QtGui.QApplication(sys.argv) dlg = QInputDialog(values=values,title=title) if ( dlg.exec_() == QtGui.QDialog.Accepted): RValues = dlg.GetModifiedValues() else: RValues = dlg.GetOriginValue() return RValues #~ #------------------------------------------------- if __name__ == '__main__': values={'String':'This is String','float':3.5,'int':15} title='QInputBox for Setting Values:' print(QInputBox(values,title)) #print(QInputBox(values))
运行效果如下.
对话框会主动根据多个Values的值主动成生窗口件控.
文章结束给大家分享下程序员的一些笑话语录:
有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”