使用信号弹屏

Posted

技术标签:

【中文标题】使用信号弹屏【英文标题】:Using signal to pop-up a screen 【发布时间】:2011-06-16 15:33:50 【问题描述】:

我在使用信号显示小屏幕时遇到了一点问题。 缩短我到目前为止的所有内容,以下代码应该显示我的问题。

import sys
from PyQt4 import QtGui, QtCore

qApp = QtGui.QApplication(sys.argv) 

class InformatieVenster(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setWindowTitle('Informatie')
        self.setGeometry(100,100,300,200)

informatie = InformatieVenster()  

class MenuKlasse(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        about = QtGui.QAction('About...', self)
        about.setShortcut('Ctrl+A')
        about.setStatusTip('Some text, haha')
        self.connect(about, QtCore.SIGNAL('clicked()'), QtCore.SIGNAL(informatie.show()))

        menubar = self.menuBar()
        self.Menu1 = menubar.addMenu('&File')
        self.Menu1.addAction(about)

Menu = MenuKlasse()
Venster = QtGui.QMainWindow() 
Venster.menuBar().addMenu(Menu.Menu1)
Venster.setGeometry(200, 200, 300, 300); 
size =  Venster.geometry()
Venster.show()
qApp.exec_()

运行此程序时,会自动弹出“信息”窗口。 但是...我只希望每次单击菜单中的“关于...”或使用分配的快捷方式时都会发生这种情况。

我如何改进我的代码,使我的问题成为历史?

你好!

【问题讨论】:

【参考方案1】:

显示该窗口,因为您在连接期间实际上是在调用.show()。您必须将函数对象而不是函数调用的结果作为参数传递给.connect()。此外,如果发出信号,要调用的函数称为“槽”,第二个SIGNAL()完全放错了位置。

将连接线替换为:

self.connect(about, QtCore.SIGNAL('triggered()') informatie.show)

更好的是,使用现代连接语法:

about.triggered.connect(informatie.show)

顺便说一句,不要在 GUI 程序中使用绝对大小。而是使用布局管理。

【讨论】:

QAction 永远不会发出"clicked()" 信号,而是使用"triggered()" about.triggered.connect(informatie.show) 确实可以正常工作。当我希望它无限工作时我应该怎么做?因为在当前状态下它可以正常工作,但是当我再次尝试时它不会显示窗口。

以上是关于使用信号弹屏的主要内容,如果未能解决你的问题,请参考以下文章

海信4kvld没有图像只有黑白屏

OBS Studio-笔记本录屏设置

电脑显示这是啥意思,如何处理

模拟器黑屏 这是啥情况

PyQt5快速上手基础篇2-按钮控制LCD屏显示

iPhoneX工艺秘密:采用LCP基材设计天线和代替同轴信号线缆