3

私はいくつかの GUI を作成しており、listView にテキストを追加したいと考えています。今は「こんにちは」を追加してそれを把握したいだけで、そこから成長させていきます。

これが私のコードのサンプルです:

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(584, 461)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.lineEdit_6 = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_6.setGeometry(QtCore.QRect(72, 210, 171, 20))
        ....
        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.addEntry)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        ....

    def addEntry(self):
        listView.Items.Add("Hello")

次に、それを開くには:

from PyQt4 import *
import signal
import sys
from PyQt4.QtGui import QApplication, QMessageBox
from inv_window import *
def main():
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

これを実行しようとすると、次のようになります。

AttributeError: 'QMainWindow' object has no attribute 'addEntry'

これを修正する方法についてのアイデアはありますか? ググってみましたが、解決策を突き止めるのに苦労しています

4

3 に答える 3

3

問題は次の行にあるようです。

        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.addEntry)

MainWindow変数はインスタンスであるため、クラスに属するメソッドはありませQMainWindowん。したがって、表示されるエラー。addEntryUi_MainWindow

可能であれば、コードのスタイル上の問題を指摘したいと思います。Python では、ローカル変数とメソッド/関数のパラメーターの名前は、慣習的に小文字で始まります。という名前の変数 (およびメソッド パラメーター) がありMainWindowます。あなたのコードを最初に読んだときMainWindow、クラスの名前のように見えたので混乱しました。この変数/メソッド パラメータの名前をmainWindowor main_windowor mainwinor suchlike に変更することをお勧めします。

于 2013-04-03T19:58:26.257 に答える
1

メソッドを記述するときはfrom PyQt4 import *main()インポートする必要がありQtCoreQtGuiそれをグロブルと見なす必要があります。具体的にするには、次のようにメイン メソッドを記述する必要があります。

from PyQt4 import QtCore, QtGui
import signal
from PyQt4 import *
from Ui_MainWindow import Ui_MainWindow
from inv_window import *
import sys
def main():
            app = QtGui.QApplication(sys.argv)
            MainWindow = QtGui.QMainWindow()
            ui = Ui_MainWindow()
            ui.setupUi(MainWindow)
            MainWindow.show()
            sys.exit(app.exec_())
if __name__ == "__main__":
    main()
于 2014-03-05T05:31:12.377 に答える