专栏首页Python编程 pyqt matplotlibPyQt5 非模态对话框(live 型)

PyQt5 非模态对话框(live 型)

本篇介绍非模态“实时”(live)对话框。与上一篇讲的”apply型“非模态对话框的区别是,非模态“实时”(live)对话框没有任何按钮,且所做的任何改变会自动、即刻得到应用。

具体的运用请参见如下代码:

import sys from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import QFont from PyQt5.QtWidgets import *

#非模态对话框("live"型更新),字体选择组合框,自定义信号

class FontPropertiesDlg(QDialog): applySignal = pyqtSignal(str,int,bool)#自定义信号 def __init__(self,parent=None): super().__init__(parent) #print(self.parent().windowTitle()) FontStyleLabel = QLabel("字体设置:") self.FontstyleComboBox = QFontComboBox()#字体选择组合框 self.FontEffectCheckBox =QCheckBox("使用特效") FontSizeLabel = QLabel("字体大小") self.FontSizeSpinBox = QSpinBox() self.FontSizeSpinBox.setRange(6, 36) self.FontSizeSpinBox.setValue(12) layout = QGridLayout()#网格布局 layout.addWidget(FontStyleLabel, 0, 0) layout.addWidget(self.FontstyleComboBox, 0, 1) layout.addWidget(FontSizeLabel, 1, 0) layout.addWidget(self.FontSizeSpinBox, 1, 1) layout.addWidget(self.FontEffectCheckBox,1,2) self.setLayout(layout)

#直接连接对话框各子组件的信号 self.FontstyleComboBox.currentFontChanged.connect(self.accept) self.FontEffectCheckBox.stateChanged.connect(self.accept) self.FontSizeSpinBox.valueChanged.connect(self.accept) self.setWindowTitle("字体")

def accept(self):#重新实现accept方法 #发射自定义信号 self.applySignal.emit(self.FontstyleComboBox.currentText(), self.FontSizeSpinBox.value(), self.FontEffectCheckBox.isChecked())

class MainDialog(QDialog): def __init__(self,parent=None): super(MainDialog,self).__init__(parent) self.FontPropertiesDlg=None self.format=dict(fontstyle="宋体",fontsize=10,fonteffect=False) FontButton = QPushButton("设置字体(非模态)") self.label = QLabel("默认选择") layout = QGridLayout() layout.addWidget(FontButton,0,0) layout.addWidget(self.label) self.setLayout(layout) FontButton.clicked.connect(self.FontModalessDialog) self.setWindowTitle("非模态对话框") #self.setFixedSize(self.width(), 100)#固定窗口大小 self.labelFont = QFont(self.format["fontstyle"],self.format["fontsize"]) self.updateLabel()

self.modalessDialog = None#初始值设为空, def updateLabel(self): self.label.setFont(self.labelFont) self.label.setText("选择的字体:%s 字体大小:%d 是否特效:%s" %(self.format["fontstyle"],self.format["fontsize"],self.format["fonteffect"])) def updateUI(self,fontstyle,fontsize,fonteffect):#For modaless dialog self.format["fontstyle"] = fontstyle self.format["fontsize"] = fontsize self.format["fonteffect"] = fonteffect self.labelFont = QFont(fontstyle,fontsize) self.updateLabel() def FontModalessDialog(self): #仅第一次调用的时候创建对话框,所有可保留对话框的各项设置 if self.modalessDialog is None: self.modalessDialog = FontPropertiesDlg(self) #连接从对话框接发出的自定义信号 self.modalessDialog.applySignal.connect(self.updateUI) self.modalessDialog.show()#非模态地显示对话框 app = QApplication(sys.argv) font= MainDialog() font.show() app.exec_()

本文分享自微信公众号 - Python编程 pyqt matplotlib(wsplovePython),作者:wsp001

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 支持python语法高亮的文本编辑器

    本例中创建的窗口部件支持Rich文本的编辑,并且支持语法高亮(基于QSyntaxHighlighter)。

    用户6021899
  • PyQt5 非模态对话框(apply 型)

    如果希望用户可以重复更改对话框中的参数并能马上看到修改结果,那么就要使用非模态对话框,这样用户就可以按照他们喜欢的方式来持续不断地修改数据并验证修改的结果了。

    用户6021899
  • 箱线图(BoxPlot) App

    由于公司的Execl版本(v2010)偏低,没有画箱线图的功能,故我用python写了一小段程序,可以用来画箱线图。绘图库使用的还是matplotlib。

    用户6021899
  • 用Python做一个翻译软件

    前两天吃了平哥的一波狗粮,他给女朋友写了一个翻译软件,自己真真切切的感受到了程序员的浪漫。在学习requests请求的时候做过类似的Demo,给百度翻译发送一个...

    小小詹同学
  • 用python解析xml的几种方法

    4.开始部分:<?xml version="1.0" encoding="utf-8"?>

    py3study
  • PyQt5 非模态对话框(apply 型)

    如果希望用户可以重复更改对话框中的参数并能马上看到修改结果,那么就要使用非模态对话框,这样用户就可以按照他们喜欢的方式来持续不断地修改数据并验证修改的结果了。

    用户6021899
  • 用 Python 写个坦克大战

    坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍生类的游戏,但这款游戏仍然受到了相当一部分人的欢迎,...

    纯洁的微笑
  • PyQt5 多文档窗口界面

    本篇介绍多文档窗口界面的写法。代码中并未实现关闭窗口前文档未保存的提醒对话框,因为之前已有介绍。

    用户6021899
  • Data Structures and Algorithms Basics(007):Stack-Queue

    用户5473628
  • html5点击出现燃放烟花特效

    今天我发现了一个非常好的html特效,是由HTML5来实现的,效果非常绚丽。效果如下:

    无邪Z

扫码关注云+社区

领取腾讯云代金券