最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PyQt4和PySide實現(xiàn)輸入對話框效果

 更新時間:2019年02月27日 10:29:52   作者:網海水手  
這篇文章主要為大家詳細介紹了基于PyQt4和PySide實現(xiàn)輸入對話框效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天做了個基于PyQt4和PySide的輸入對話框.已放到PyPi中,包名wlab,大家可以使用pip安裝:

pip install wlab

在程序輸入中,有時會要求同時改變多個參數(shù)值,而且類型也不盡相同,
這時下面的模塊比較徹底的解決了這個問題.先看個示例吧.

比如我們有三個參數(shù),分別為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里面數(shù)據(jù)的類型和字典valuse中時一致的.

也就是說:

如果values中是整數(shù),那么rvalue中的值也是整數(shù);

如果value中是浮點數(shù),那么rvalue中的值也是浮點數(shù);

如果value中是字符串,那么rvalue中的值也是字符串;

目前只支持這三種類型.但對values中輸入參數(shù)并沒有沒有數(shù)目限制.

對于不會使用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)#已自動創(chuàng)建,無需再創(chuàng)建
  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)#創(chuàng)建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_())

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python自定義logger模塊的實例代碼

    Python自定義logger模塊的實例代碼

    Python標準庫中的logging模塊提供了日志記錄的功能,自定義 Logger 可以根據(jù)項目的需求定制化日志記錄,滿足特定的日志記錄格式、輸出目標和日志級別等要求,本文給大家介紹了Python自定義logger模塊的實例代碼,需要的朋友可以參考下
    2024-02-02
  • python實現(xiàn)控制臺輸出顏色

    python實現(xiàn)控制臺輸出顏色

    這篇文章主要為大家詳細介紹了python實現(xiàn)控制臺輸出顏色,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Python 實時獲取任務請求對應的Nginx日志的方法

    Python 實時獲取任務請求對應的Nginx日志的方法

    本文給大家分享Python 實時獲取任務請求對應的Nginx日志的方法,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-07-07
  • Python實現(xiàn)城市公交網絡分析與可視化

    Python實現(xiàn)城市公交網絡分析與可視化

    這篇文章主要介紹了通過Python爬取城市公交站點、線路及其經緯度數(shù)據(jù),并做可視化數(shù)據(jù)分析。文中的示例代碼講解詳細,感興趣的可以學習一下
    2021-12-12
  • 十行Python3代碼實現(xiàn)去除pdf文件水印

    十行Python3代碼實現(xiàn)去除pdf文件水印

    pfd文檔一般無法直接去除水印,需要先將pfd文檔轉換成圖片,在逐一對圖片進行水印去除操作,最后在把圖片插入到pdf文檔中,這樣就很繁瑣。本文將用十行Python3代碼輕輕松松實現(xiàn)PDF文件水印去除,快來了解一下吧
    2022-02-02
  • python中將字典形式的數(shù)據(jù)循環(huán)插入Excel

    python中將字典形式的數(shù)據(jù)循環(huán)插入Excel

    這篇文章主要介紹了python中將字典形式的數(shù)據(jù)循環(huán)插入Excel的方法,需要的朋友可以參考下
    2018-01-01
  • Python保存MongoDB上的文件到本地的方法

    Python保存MongoDB上的文件到本地的方法

    這篇文章主要介紹了Python保存MongoDB上的文件到本地的方法,涉及Python調用pymongo模塊的gridfs方法來操作MongoDB文件的相關技巧,需要的朋友可以參考下
    2016-03-03
  • python讀取Excel實例詳解

    python讀取Excel實例詳解

    這篇文章主要為大家詳細介紹了python讀取Excel的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 對tensorflow中cifar-10文檔的Read操作詳解

    對tensorflow中cifar-10文檔的Read操作詳解

    今天小編就為大家分享一篇對tensorflow中cifar-10文檔的Read操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Django中celery執(zhí)行任務結果的保存方法

    Django中celery執(zhí)行任務結果的保存方法

    今天小編就為大家分享一篇Django中celery執(zhí)行任務結果的保存方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

鄂伦春自治旗| 营口市| 驻马店市| 祁连县| 清水县| 平和县| 无极县| 祁连县| 徐州市| 犍为县| 寿光市| 秀山| 瑞昌市| 牙克石市| 中江县| 临西县| 西乌珠穆沁旗| 休宁县| 美姑县| 旬阳县| 文登市| 沂水县| 麻江县| 黎平县| 西畴县| 盘锦市| 卓尼县| 马公市| 天峻县| 崇文区| 墨江| 定边县| 昆明市| 昭觉县| 五大连池市| 凤阳县| 清水县| 奉化市| 甘肃省| 汾西县| 黄石市|