开发者

Using signal to pop-up a screen

I'm having a little trouble using a signal to make a little screen appear. Shortening all i have so far, this following code should show my problem.

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.s开发者_Go百科etGeometry(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_()

When this program is runned, the 'informatie' window automatically pops-up. However... i only want this to happen every time I click on 'about...' in the menu, or when i use the assigned shortcut.

How may i improve my code such that my problem will be made history?

Greets!


The window is shown, because you are actually calling .show() during your connect. You have to pass a function object, not the result of a function invocation, as argument to .connect(). Moreover the function to be invoked, if a signal is emitted, is called "slot", the second SIGNAL() is completely misplaced.

Replace the connect line with:

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

Even better, use the modern connection syntax:

about.triggered.connect(informatie.show)

Btw, do not use absolute sizes in GUI programs. Instead use layout management.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜