1

信号を使用して小さな画面を表示するのに少し問題があります。これまでのすべてを短縮すると、次のコードで問題が表示されます。

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_()

このプログラムを実行すると、「情報」ウィンドウが自動的にポップアップします。ただし...メニューの「about...」をクリックするたびに、または割り当てられたショートカットを使用するときにのみ、これが発生するようにします。

問題が歴史に残るようにコードを改善するにはどうすればよいですか?

ごきげんよう!

4

1 に答える 1

3

.show()接続中に実際に呼び出しているため、ウィンドウが表示されます。への引数として、関数呼び出しの結果ではなく、関数オブジェクトを渡す必要があります.connect()。さらに、シグナルが発行された場合に呼び出される関数は「スロット」と呼ばれ、2 番目の関数SIGNAL()は完全に見当違いです。

接続行を次のように置き換えます。

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

さらに良いことに、最新の接続構文を使用します。

about.triggered.connect(informatie.show)

ところで、GUI プログラムでは絶対サイズを使用しないでください。代わりに、レイアウト管理を使用してください。

于 2011-06-16T16:27:45.940 に答える