前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt5 非模态对话框(live 型)

PyQt5 非模态对话框(live 型)

作者头像
用户6021899
发布2019-08-14 17:38:43
1.5K0
发布2019-08-14 17:38:43
举报

本篇介绍非模态“实时”(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_()

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档