我在使用信号制作一个小屏幕时遇到了一些麻烦。 到目前为止缩短了所有内容,以下代码应该显示我的问题。
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_()
运行此程序时,会自动弹出“informatie”窗口。 但是......我只希望每次单击菜单中的“关于...”或我使用指定的快捷方式时都会发生这种情况。
我如何改进我的代码,使我的问题成为历史?
电贺!
答案 0 :(得分:3)
显示窗口,因为您在连接期间实际上正在调用.show()
。您必须将函数对象(而不是函数调用的结果)作为.connect()
的参数传递。此外,如果发出信号,要调用的函数称为“slot”,第二个SIGNAL()
完全错位。
将连接线替换为:
self.connect(about, QtCore.SIGNAL('triggered()') informatie.show)
更好的是,使用现代连接语法:
about.triggered.connect(informatie.show)
顺便说一下,不要在GUI程序中使用绝对大小。而是使用布局管理。