今天做了个基于PyQt4和PySide的输入对话框.已放到PyPi中,包名wlab,大家可以使用pip安装:
pip install wlab
在程序输入中,有时会要求同时改变多个参数值,而且类型也不尽相同,
这时下面的模块比较彻底的解决了这个问题.先看个示例吧.
比如我们有三个参数,分别为int,float,和字符串类型:
values={'String':'This is String','float':3.5,'int':15} GroupBoxTitle='Please set values:' title='QInputBox:' rvalues=QInputBox(values=values,GroupBoxTitle=GroupBoxTitle,title=title) print(rvalues)
生成的GUI界面如下:
返回的结果中我们注意到字典rvalues里面数据的类型和字典valuse中时一致的.
也就是说:
如果values中是整数,那么rvalue中的值也是整数;
如果value中是浮点数,那么rvalue中的值也是浮点数;
如果value中是字符串,那么rvalue中的值也是字符串;
目前只支持这三种类型.但对values中输入参数并没有没有数目限制.
对于不会使用pip的新手,可以复制下面的文件:
#-*- coding:utf-8 -*- #~ #-------------------------------------------------------------------------------- #~ module:wlab #~ FileName=WPyQtInput.py #~Class:QInputGroupBox,QInputDialog,QInputBox #~ author:Wu Xuping #~ Date:2013-05-06 #~ Email:539688300@qq.com #~ Remark:based on PyQt4 or PySide #~ #------------------------------------------------- try: from PyQt4 import QtGui from PyQt4 import QtCore from PyQt4.QtCore import pyqtSlot from PyQt4.QtCore import pyqtSignal IsPyQt=True IsPySide=False except ImportError: from PySide import QtGui from PySide import QtCore from PySide.QtCore import Slot as pyqtSlot from PySide.QtCore import Signal as pyqtSignal IsPyQt=False IsPySide=True #~ #------------------------------------------------- #~ #------------------------------------------------- #~ #将字符串一特定的长度输出 def FormatStr(MaxStrLength,s): if (len(s)<MaxStrLength): for n in range(MaxStrLength-len(s)): s=' '+s rs=str(s)+':' return rs class IntLineEdit(QtGui.QLineEdit): def __init__ (self,num=0): ''' #~ IntLineEdit(num) ''' QtGui.QLineEdit.__init__ (self) self.num=num self.setText(str(self.num)) @pyqtSlot(int) def setValue(self,n): self.setText(str(n)) return (self.num,n) class FloatLineEdit(QtGui.QLineEdit): def __init__ (self,num=0.0): ''' #~ FloatLineEdit(num) ''' QtGui.QLineEdit.__init__ (self) self.num=num self.setText(str(self.num)) @pyqtSlot(int) def setValue(self,n): if ( self.num>0): self.setText(str(self.num+n*self.num/50.0)) else: self.setText(str(self.num-n*self.num/50.0)) return (self.num,n) #~ #------------------------------------------------- class QInputGroupBox(QtGui.QGroupBox): def __init__(self, values={'String':'This is String','float':3.5,'int':15},title='Please set values',ntimes=2.0,parent=None): ''' #~#--------------------------------------------------- #~#Examples: #~#--------------------------------------------------- #~ >values={'String':'This is String','float':3.5,'int':15} #~ >GroupBoxTitle='Please set values' #~ >self.QIGBox=QInputGroupBox(values=values,title=GroupBoxTitle,ntimes=2.0,parent=self) #~ >rvalues=self.QIGBox.GetOriginValue() #~ >rvalues=self.QIGBox.GetModifiedValues() #~#--------------------------------------------------- #~#Parameters: #~#--------------------------------------------------- #~#values={'String':'This is String','float':3.5,'int':15} #~#title='Please set values' #~#ntimes=2.0 #~#parent=None ''' QtGui.QGroupBox.__init__ (self, title=title,parent = parent) self.OriginValues=values.copy() self.ModifiedValues=values.copy() MaxStrLength=max([len(str(s)) for s in list(values.keys())]) layout = QtGui.QGridLayout() cnt=0 for key in self.ModifiedValues: label=FormatStr(MaxStrLength,str(key)) KeyLabel=QtGui.QLabel(label) layout.addWidget(KeyLabel, cnt, 0) ovk=self.ModifiedValues[key] if(type(ovk)==int) : valueLineEdit=IntLineEdit(ovk) layout.addWidget(valueLineEdit, cnt , 1) slider=QtGui.QSlider(orientation= QtCore.Qt.Horizontal) if (ovk>0): slider.setRange( ovk/(ntimes+1), ovk*(ntimes+1)) elif (ovk==0): slider.setRange( -5*(ntimes+1), 5*(ntimes+1)) else: slider.setRange(ovk*(ntimes+1),ovk/(ntimes+1)) slider.setValue(ovk) QtCore.QObject.connect(slider,QtCore.SIGNAL('valueChanged(int)'), valueLineEdit, QtCore.SLOT('setValue(int)')) layout.addWidget(slider, cnt ,2) elif(type(ovk)==float) : valueLineEdit=FloatLineEdit(ovk) layout.addWidget(valueLineEdit, cnt , 1) slider=QtGui.QSlider(orientation= QtCore.Qt.Horizontal) slider.setRange( -50*ntimes, 50*ntimes) QtCore.QObject.connect(slider,QtCore.SIGNAL('valueChanged(int)'), valueLineEdit, QtCore.SLOT('setValue(int)')) layout.addWidget(slider, cnt ,2) else: valueLineEdit=QtGui.QLineEdit(ovk) layout.addWidget(valueLineEdit, cnt, 1,1,2) #~ #set an object name for QLineEdit,Later we can use findchild() to find it valueLineEdit.setObjectName('VLE'+str(cnt)) layout.setRowStretch(cnt,5) cnt=cnt+1 layout.setColumnStretch(0, 1) layout.setColumnStretch(1, 5) layout.setColumnStretch(2, 10) self.setLayout(layout) 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) if (IsPyQt): VLE=self.findChild((QtGui.QLineEdit, ),VLEObjectName) else: 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 #~ #------------------------------------------------- class QInputDialog(QtGui.QDialog): def __init__(self, values={'String':'This is String','float':3.5,'int':15},GroupBoxTitle='Please set values',title='QInputDialog:',parent=None): ''' #~ >values={'String':'This is String','float':3.5,'int':15} #~ >GroupBoxTitle='Please set values' #~ >title='QInputDialog:' #~ >dlg = QInputDialog(values=values,GroupBoxTitle=GroupBoxTitle,title=title,parent=None) #~ >if ( dlg.exec_() == QtGui.QDialog.Accepted): #~ > rvalues = dlg.GetModifiedValues() #~ >else: #~ > rvalues = dlg.GetOriginValue() ''' QtGui.QDialog.__init__(self, parent=parent) self.setWindowTitle(title) self.QIGBox=QInputGroupBox(values=values,title=GroupBoxTitle,parent=self) self.vbox = QtGui.QVBoxLayout() self.vbox.addWidget(self.QIGBox) 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.QIGBox.GetOriginValue() def GetModifiedValues(self): ''' #~ if the user click btn_OK,then return self.ModifiedValues ''' return self.QIGBox.GetModifiedValues() #~ #------------------------------------------------- #~ #Good packaging QInputBox def QInputBox(values={'String':'This is String','float':3.5,'int':15},GroupBoxTitle='Please set values',title='QInputBox'): ''' #~ >values={'String':'This is String','float':3.5,'int':15} #~ >GroupBoxTitle='Please set values' #~ >title='QInputBox' #~ >rvalues=QInputBox(values=values,GroupBoxTitle=GroupBoxTitle,title=title) #~ >print(rvalues) #~ #>rvalues=QInputBox(values,GroupBoxTitle) #~ #>rvalues=QInputBox(values) #~ #>rvalues=QInputBox() ''' #app = QtGui.QApplication(sys.argv)#已自动创建,无需再创建 dlg = QInputDialog(values=values,GroupBoxTitle=GroupBoxTitle,title=title) if ( dlg.exec_() == QtGui.QDialog.Accepted): rvalues = dlg.GetModifiedValues() else: rvalues = dlg.GetOriginValue() return rvalues #~ #--------------------------------------------------------------------------------------------------------- #~ # main test program for __WPyQtInput__.py #~ #--------------------------------------------------------------------------------------------------------- if __name__ == '__main__': #---------------------------------------------------------------------------------------- try: from PyQt4 import QtGui from PyQt4 import QtCore from PyQt4.QtCore import pyqtSlot from PyQt4.QtCore import pyqtSignal IsPyQt=True IsPySide=False except ImportError: from PySide import QtGui from PySide import QtCore from PySide.QtCore import Slot as pyqtSlot from PySide.QtCore import Signal as pyqtSignal #---------------------------------------------------------------------------------------- import sys app = QtGui.QApplication(sys.argv)#创建Qt进程app #---------------------------------------------------------------------------------------- #示例1 values={'String':'This is String','float':-3.5,'int':-15} GroupBoxTitle='Please set values' title='the first example of QInputBox ' rvalues=QInputBox(values=values,GroupBoxTitle=GroupBoxTitle,title=title) print(rvalues) #>{'int': -15, 'float': -3.5, 'String': 'This is String'} #---------------------------------------------------------------------------------------- #示例2 from collections import OrderedDict values=OrderedDict([('c', 1), (2, 2), ('a', 3)]) rvalues1=QInputBox(values=values) print(rvalues1) #>OrderedDict([('c', 1), (2, 2), ('a', 3)]) #---------------------------------------------------------------------------------------- #示例3 values={'String':'This is String','float':-3.5,'int':-15} GroupBoxTitle='Please set values' title='QInputBox' rvalues2=QInputBox(values=values,GroupBoxTitle=GroupBoxTitle,title=title) print(rvalues2) #>{'int': -15, 'float': -3.5, 'String': 'This is String'} #---------------------------------------------------------------------------------------- sys.exit(app.exec_())
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]