Pyqt5系列(二)_第1页
Pyqt5系列(二)_第2页
Pyqt5系列(二)_第3页
Pyqt5系列(二)_第4页
Pyqt5系列(二)_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Pyqt5系列(二)五 基本界面组件之inputDialogQInputDialog类提供了一种简单方面的对话框来获得用户的单个输入信息,可以是一个字符串,一个Int类型数据,一个double类型数据或是一个下拉列表框的条目。 对应的Dialog其中包括一个提示标签,一个输入控件(若是调用字符串输入框,则为一个QLineEdit,若是调用Int类型或double类型,则为一个QSpinBox,若是调用列表条目输入框,则为一个QComboBox),还包括一个确定输入(Ok)按钮和一个取消输入(Cancel)按钮。QInputDialog:class QInputDialog(QDialog) |

2、 QInputDialog(QWidget parent=None, Qt.WindowFlags flags=0)QInputDialog同样继承自QDialog,提供简单输入的对话框,代码示例 :示例代码如下:#-*- coding:utf-8 -*-'''inputDialog'''_author_ = 'Tony Zhu'from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QInputDialog, QGridLayout, QLabel, QPush

3、Button, QFrameclass InputDialog(QWidget): def _init_(self): super(InputDialog,self)._init_() self.initUi() def initUi(self): self.setWindowTitle("项目信息") self.setGeometry(400,400,300,260) label1=QLabel("项目名称:") label2=QLabel("项目类型:") label3=QLabel("项目人员:") labe

4、l4=QLabel("项目成本:") label5=QLabel("项目介绍:") Lable = QLabel("PyQt5") Lable.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.styleLable = QLabel("外包") self.styleLable.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.numberLable = QLabel("40"

5、;) self.numberLable.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.costLable = QLabel("400.98") self.costLable.setFrameStyle(QFrame.Panel|QFrame.Sunken) roductionLable = QLabel("服务外包第三方公司") roductionLable.setFrameStyle(QFrame.Panel|QFrame.Sunken) nameButton=QPushB

6、utton(".") nameButton.clicked.connect(self.selectName) styleButton=QPushButton(".") styleButton.clicked.connect(self.selectStyle) numberButton=QPushButton(".") numberButton.clicked.connect(self.selectNumber) costButton=QPushButton(".") costButton.clicked.conne

7、ct(self.selectCost) introductionButton=QPushButton(".") introductionButton.clicked.connect(self.selectIntroduction) mainLayout=QGridLayout() mainLayout.addWidget(label1,0,0) mainLayout.addWidget(Lable,0,1) mainLayout.addWidget(nameButton,0,2) mainLayout.addWidget(label2,1,0) mainL

8、ayout.addWidget(self.styleLable,1,1) mainLayout.addWidget(styleButton,1,2) mainLayout.addWidget(label3,2,0) mainLayout.addWidget(self.numberLable,2,1) mainLayout.addWidget(numberButton,2,2) mainLayout.addWidget(label4,3,0) mainLayout.addWidget(self.costLable,3,1) mainLayout.addWidget(costButton,3,2)

9、 mainLayout.addWidget(label5,4,0) mainLayout.addWidget(roductionLable,4,1) mainLayout.addWidget(introductionButton,4,2) self.setLayout(mainLayout) def selectName(self): name,ok = QInputDialog.getText(self,"项目名称","输入项目名称:", QLineEdit.Normal,Lable.text() if ok and

10、(len(name)!=0): Lable.setText(name) def selectStyle(self): list = "外包","自研" style,ok = QInputDialog.getItem(self,"项目性质","请选择项目性质:",list) if ok : self.styleLable.setText(style) def selectNumber(self): number,ok = QInputDialog.getInt(self,"项目成员&quo

11、t;,"请输入项目成员人数:",int(self.numberLable.text(),20,100,2) if ok : self.numberLable.setText(str(number) def selectCost(self): cost,ok = QInputDialog.getDouble(self,"项目成本","请输入项目成员人数:",float(self.costLable.text(),100.00,500.00,2) if ok : self.costLable.setText(str(cost) def s

12、electIntroduction(self): introduction,ok = QInputDialog.getMultiLineText(self,"项目介绍","介绍:","服务外包第三方公司 nPython project") if ok : roductionLable.setText(introduction)if _name_="_main_": import sys app=QApplication(sys.argv) myshow=InputDialog() myshow.sh

13、ow()sys.exit(app.exec_()示例说明: 通过点击不同的按钮,来选择不同类型的输入对话框,从而选择所需的数据。 代码分析: L1822: label1=QLabel("项目名称:") label2=QLabel("项目类型:") label3=QLabel("项目人员:") label4=QLabel("项目成本:") label5=QLabel("项目介绍:")定义了数据项名称的标签。L2433: Lable = QLabel("PyQt5&quo

14、t;) Lable.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.styleLable = QLabel("外包") self.styleLable.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.numberLable = QLabel("40") self.numberLable.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.costLable = QLabel("400.98&qu

15、ot;) self.costLable.setFrameStyle(QFrame.Panel|QFrame.Sunken) roductionLable = QLabel("服务外包第三方公司") roductionLable.setFrameStyle(QFrame.Panel|QFrame.Sunken)定义了项目数据项中的数据内容,数据内容显示在对应的标签中。 setFrameStyle()设定标签的样式,有如下的样式: QFrame.Box QFrame.Panel QFrame.WinPanel QFrame.HLine QFram

16、e.VLine QFrame.StyledPanel QFrame.Sunken QFrame.RaisedL35L44: nameButton=QPushButton(".") nameButton.clicked.connect(self.selectName) styleButton=QPushButton(".") styleButton.clicked.connect(self.selectStyle) numberButton=QPushButton(".") numberButton.clicked.connect(se

17、lf.selectNumber) costButton=QPushButton(".") costButton.clicked.connect(self.selectCost) introductionButton=QPushButton(".") introductionButton.clicked.connect(self.selectIntroduction)实例化QPushButton对象,并将对应的clicked信号和自定义的槽函数绑定起来。L4661: 实例化网格布局,并将对应的控件添加到网格布局中。功能分析:1:获取项目名称: def se

18、lectName(self): name,ok = QInputDialog.getText(self,"项目名称","输入项目名称:", QLineEdit.Normal,Lable.text() if ok and (len(name)!=0): Lable.setText(name)QInputDialog中很多方法均为静态方法,因此不需要实例化直接可以调用。调用QInputDialog的getText()函数弹出标准字符串输入对话框,getText()函数原型如下: | getText(.) | QInputD

19、ialog.getText(QWidget, str, str, QLineEdit.EchoMode echo=QLineEdit.Normal, str text=QString(), Qt.WindowFlags flags=0, Qt.InputMethodHints inputMethodHints=Qt.ImhNone) -> (str, bool)第1个参数parent,用于指定父组件;第2个参数str,是标准输入对话框的标题名;第3个参数str,标准输入对话框的标签提示;第4个参数echo,mode指定标准输入对话框中QLineEdit控件的输入模式;第5个参数str,标

20、准输入对话框中QLineEdit控件的默认值;第6个参数flags,指明标准输入对话框的窗体标识;第7个参数inputMethodHints,通过选择不同的inputMethodHints值来实现不同的键盘布局;单击nameButton之后的效果:若用户单击了“OK”按钮,则把新输入的名称更新至显示标签。2:获取项目属性: def selectStyle(self): list = "外包","自研" style,ok = QInputDialog.getItem(self,"项目性质","请选择项目性质:",li

21、st) if ok : self.styleLable.setText(style)调用QInputDialog的getItem()函数弹出标准条目选择对话框,getItem()函数原型如下: | getItem(.) | QInputDialog.getItem(QWidget, str, str, list-of-str, int current=0, booleditable=True, Qt.WindowFlags flags=0, Qt.InputMethodHints inputMethodHints=Qt.ImhNone) -> (str, bool)第1个参数parent

22、,用于指定父组件;第2个参数str,是标准条目选择对话框的标题名;第3个参数str,标准条目选择对话框的标签提示;第4个参数list-of-str,标准条目选择对话框中对应条目的list;第5个参数editable,标准条目选择对话框条目是否可编辑标识,默认为不可编辑;第6个参数flags,指明标准输入对话框的窗体标识;第7个参数inputMethodHints,通过选择不同的inputMethodHints值来实现不同的键盘布局;单击styleButton之后的效果:若用户单击了“OK”按钮,则把新选择的类型更新至显示标签。3:获取项目成员: def selectNumber(self):

23、number,ok = QInputDialog.getInt(self,"项目成员","请输入项目成员人数:",int(self.numberLable.text(),20,100,2) if ok : self.numberLable.setText(str(number)调用QInputDialog的getInt()函数弹出标准int类型输入对话框,getInt()函数原型如下:| getInt(.)| QInputDialog.getInt(QWidget, str, str, int value=0, int min=-2147483647,

24、int max=2147483647, int step=1, Qt.WindowFlags flags=0) -> (int, bool)第1个参数parent,用于指定父组件;第2个参数str,是标准int类型输入对话框的标题名;第3个参数str,标准int类型输入对话框的标签提示;第4个参数value,标准int类型输入对话框中的默认值;第5个参数min,标准int类型输入对话框中的最小值;第6个参数max,标准int类型输入对话框中的最大值;第7个参数step,标准int类型输入对话框中的步长,即QSpinBox中上下选择是数据变化的步长;第8个参数inputMethodHint

25、s,通过选择不同的inputMethodHints值来实现不同的键盘布局;单击numberButton之后的效果:若用户单击了“OK”按钮,则把新选择的成员数据更新至显示标签。4:获取项目成本: def selectCost(self): cost,ok = QInputDialog.getDouble(self,"项目成本","请输入项目成员人数:",float(self.costLable.text(),100.00,500.00,2) if ok : self.costLable.setText(str(cost)调用QInputDialog的ge

26、tDouble()函数弹出标准float类型输入对话框,getDouble()函数原型如下: | getDouble(.) | QInputDialog.getDouble(QWidget, str, str, float value=0, float min=-2147483647, float max=2147483647, int decimals=1, Qt.WindowFlags flags=0) -> (float, bool)第1个参数parent,用于指定父组件;第2个参数str,输入对话框的标题名;第3个参数str,输入对话框的标签提示;第4个参数value,标准flo

27、at类型输入对话框中的默认值;第5个参数min,标准float类型输入对话框中的最小值;第6个参数max,标准float类型输入对话框中的最大值;第7个参数decimals,小数点后面保留的位数;第8个参数inputMethodHints,通过选择不同的inputMethodHints值来实现不同的键盘布局;单击costButton之后的效果:若用户单击了“OK”按钮,则把新选择的成本数据更新至显示标签5:获取项目介绍: def selectIntroduction(self): introduction,ok = QInputDialog.getMultiLineText(self,&quo

28、t;项目介绍","介绍:","服务外包第三方公司 nPython project") if ok : roductionLable.setText(introduction)调用QInputDialog的getMultiLineText()函数弹出标准多行文本类型输入对话框,getMultiLineText()函数原型如下: | getMultiLineText(.) | QInputDialog.getMultiLineText(QWidget, str, str, str text='', Qt.Window

29、Flags flags=0, Qt.InputMethodHints inputMethodHints=Qt.ImhNone) -> (str, bool)第1个参数parent,用于指定父组件;第2个参数str,输入对话框的标题名;第3个参数str,输入对话框的标签提示;第4个参数text,输入对话框中LineEdit的默认值;第5个参数flags,指明标准输入对话框的窗体标识;第6个参数inputMethodHints,通过选择不同的inputMethodHints值来实现不同的键盘布局;单击introductionButton之后的效果:若用户单击了“OK”按钮,则把新修改的项目介

30、绍信息更新至显示标签六 基本界面组件之MessageBox消息框针对某个场景以文本的形式向用户进行提示,为了获取用户的响应消息框可以显示图标和标准按钮。在实际的界面交互中,经常会看到各种类型的消息框,显示关于消息框,显示严重错误消息框,显示警告消息框等等。由于这些对话框在各个程序中都是一样的,所以QT中就统一提供了一个QMessageBox的类,这样在所有程序中都可以直接使用。QMessageBox提供两套接口来实现,一种是static functions(静态方法调用),另外一种 the property-base API(基于属性的API)。直接调用静态方法是一种比较简单的途径,但是没有基

31、于属性API的方式灵活。在QT的官网上推荐使用the property-base API。Static functions 方式:QMessageBox用于显示消息提示。一般会使用到其提供的几个 static 函数(C+层的函数原型,其参数类型和python中的一样):通过一个示例来进行说明各个方法的使用:#-*- coding:utf-8 -*-'''MessageBox'''_author_ = 'Tony Zhu'from PyQt5.QtWidgets import QApplication, QWidget, QLine

32、Edit, QMessageBox, QGridLayout, QLabel, QPushButton, QFrameclass MessageBox(QWidget): def _init_(self): super(MessageBox,self)._init_() self.initUi() def initUi(self): self.setWindowTitle("MessageBox") self.setGeometry(400,400,300,290) self.questionLabel = QLabel("Question:") sel

33、f.questionLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) Label = QLabel("Information:") Label.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.warningLabel = QLabel("Warning:") self.warningLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.criticalLabel = QLabe

34、l("Critical:") self.criticalLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.aboutLabel = QLabel("About:") self.aboutLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) self.aboutQtLabel = QLabel("About QT:") self.aboutQtLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) s

35、elf.resultLabel = QLabel("Result:") self.resultLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) questButton=QPushButton(".") questButton.clicked.connect(self.selectQuestion) infoButton=QPushButton(".") infoButton.clicked.connect(self.selectInfo) warningButton=QPushButton

36、(".") warningButton.clicked.connect(self.selectWarning) criticalButton=QPushButton(".") criticalButton.clicked.connect(self.selectCritical) aboutButton=QPushButton(".") aboutButton.clicked.connect(self.selectAbout) aboutQtButton=QPushButton(".") aboutQtButton.

37、clicked.connect(self.selectAboutQt) mainLayout=QGridLayout() mainLayout.addWidget(self.questionLabel,0,0) mainLayout.addWidget(questButton,0,1) mainLayout.addWidget(Label,1,0) mainLayout.addWidget(infoButton,1,1) mainLayout.addWidget(self.warningLabel,2,0) mainLayout.addWidget(warningButton

38、,2,1) mainLayout.addWidget(self.criticalLabel,3,0) mainLayout.addWidget(criticalButton,3,1) mainLayout.addWidget(self.aboutLabel,4,0) mainLayout.addWidget(aboutButton,4,1) mainLayout.addWidget(self.aboutQtLabel,5,0) mainLayout.addWidget(aboutQtButton,5,1) mainLayout.addWidget(self.resultLabel,6,1) s

39、elf.setLayout(mainLayout) def selectQuestion(self): button = QMessageBox.question(self,"Question","检测到程序有更新,是否安装最新版本?", QMessageBox.Ok|QMessageBox.Cancel,QMessageBox.Ok) if button = QMessageBox.Ok: self.resultLabel.setText("<h2>Question:<font color=red> OK</fo

40、nt></h2>") elif button = QMessageBox.Cancel: self.resultLabel.setText("<h2>Question:<font color=red> Cancel</font></h2>") else: return def selectInfo(self): QMessageBrmation(self,"Information","程序当前版本为V3.11") self.resultLabel

41、.setText("Information") 4 def selectWarning(self): button = QMessageBox.warning(self,"Warning","恢复出厂设置将导致用户数据丢失,是否继续操作?", QMessageBox.Reset|QMessageBox.Help|QMessageBox.Cancel,QMessageBox.Reset) if button = QMessageBox.Reset: self.resultLabel.setText("<h2>War

42、ning:<font color=red> Reset</font></h2>") elif button = QMessageBox.Help: self.resultLabel.setText("<h2>Warning:<font color=red> Help</font></h2>") elif button = QMessageBox.Cancel: self.resultLabel.setText("<h2>Warning:<font col

43、or=red> Cancel</font></h2>") else: return def selectCritical(self): QMessageBox.critical(self,"Critical","服务器宕机!") self.resultLabel.setText("<h2><font color=red>Critical</font></h2>") def selectAbout(self): QMessageBox.about(s

44、elf,"About","Copyright 2015 Tony zhu.n All Right reserved.") self.resultLabel.setText("About") def selectAboutQt(self): QMessageBox.aboutQt(self,"About Qt") self.resultLabel.setText("About Qt")if _name_="_main_": import sys app=QApplication

45、(sys.argv) myshow=MessageBox() myshow.show() sys.exit(app.exec_()示例说明: 通过点击不同的按钮,来选择不同类型的消息框,并将处理的结果显示在resultLabel中。 代码分析: L1932:self.questionLabel = QLabel("Question:") self.questionLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken) .self.resultLabel=QLabel("Result:") self.resultLa

46、bel.setFrameStyle(QFrame.Panel|QFrame.Sunken)定义不同消息类型的标签,其中resultLabel显示不同message box执行的结果。L3445: questButton=QPushButton(".") questButton.clicked.connect(self.selectQuestion) . aboutQtButton=QPushButton(".") aboutQtButton.clicked.connect(self.selectAboutQt)定义针对不同类型操作的按钮,并且将对应按钮的

47、clicked信号和自定义的槽函数绑定在一起。L4760: mainLayout=QGridLayout() mainLayout.addWidget(self.questionLabel,0,0) mainLayout.addWidget(questButton,0,1) . mainLayout.addWidget(self.aboutQtLabel,5,0) mainLayout.addWidget(aboutQtButton,5,1) mainLayout.addWidget(self.resultLabel,6,1)实例化网格布局,并将定义的标签和按钮添加到布局的对应位置。1、que

48、stion 类型 question类型的执行代码段如下: def selectQuestion(self): button = QMessageBox.question(self,"Question","检测到程序有更新,是否安装最新版本?", QMessageBox.Ok|QMessageBox.Cancel,QMessageBox.Ok) if button = QMessageBox.Ok: self.resultLabel.setText("<h2>Question:<font color=red> OK<

49、/font></h2>") elif button = QMessageBox.Cancel: self.resultLabel.setText("<h2>Question:<font color=red> Cancel</font></h2>") else: return调用static方法question()生产question类型的消息框(Ok和cancel按钮,默认选择Ok按钮),该执行之后返回用户选择的按钮。通过判断返回的按钮类型,在resultLabel中显示对应的内容。question

50、(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)第1个参数parent,用于指定父组件;第2个参数title,是消息框中的标题;第3个参数text,消息框中显示的内容。第4个参数buttons ,消息框中显示的button,它的取值是 StandardButtons ,每个选项可以使用 | 运算组合起来。如QMessa

51、geBox.Ok|QMessageBox.Cancel,第5个参数button ,消息框中默认选中的button。这个函数有一个返回值,用于确定用户点击的是哪一个按钮。我们可以直接获取其返回值。如果返回值是 Ok,也就是说用户点击了 Ok按钮,QLabel支持HTML形式的文本显示,在resultLabel中是通过HTML的语法形式进行显示的。具体可以参考一下HTML语法。执行的结果:2、information类型 information类型的执行代码段如下: def selectInfo(self): QMessageBrmation(self,"Informatio

52、n","程序当前版本为V3.11") self.resultLabel.setText("Information")调用static方法information()生产information类型的消息框,该类型默认有一个Ok按钮。information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)第1,2,3参数,同q

53、uestion类型的说明。第4个参数buttons ,默认参数,默认为Ok按钮。执行的结果:3、warning类型 warning类型的执行代码段如下: def selectWarning(self): button = QMessageBox.warning(self,"Warning","恢复出厂设置将导致用户数据丢失,是否继续操作?", QMessageBox.Reset|QMessageBox.Help|QMessageBox.Cancel,QMessageBox.Reset) if button = QMessageBox.Reset: sel

54、f.resultLabel.setText("<h2>Warning:<font color=red> Reset</font></h2>") elif button = QMessageBox.Help: self.resultLabel.setText("<h2>Warning:<font color=red> Help</font></h2>") elif button = QMessageBox.Cancel: self.resultLabel.setText("<h2>Warning:<font color=red> Cancel</font></h2>") else: return调用static方法warning()生产warning类型的消息框(Reset、Help和Cancel按钮,默认选择Reset按钮),该执行之后返回用户选择的按钮。通过判断返回的按钮类型,在resultLabel中显示对应的内容。warning(QWidget *parent,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论