Qtデザイナーの質問で誰かが私を助けてくれることを願っています。GUI ファイルを呼び出すクラスの外部から GUI 要素を変更しようとしています。プログラムの構造を示すサンプル コードをセットアップしました。私の目標はfunc2
、メイン プログラム (または別のクラス) で、メイン ウィンドウのステータスバーを変更することです。
from PyQt4 import QtCore, QtGui
from main_gui import Ui_Main
from about_gui import Ui_About
#main_gui and about_gui are .py files generated by designer and pyuic
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_Main()
self.ui.setupUi(self)
self.ui.actionMyaction.triggered.connect(self.func1)
#Signals go here, and call this class's methods, which call other methods.
#I can't seem to call other methods/functions directly, and these won't take arguments.
def func1(self):
#Referenced by the above code. Can interact with other classes/functions.
self.ui.statusbar.showMessage("This works!")
def func2(self):
StartQT4.ui.statusbar.showMessage("This doesn't work!")
#I've tried many variations of the above line, with no luck.
#More classes and functions not directly-related to the GUI go here; ie the most of the program.
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = StartQT4()
myapp.show()
sys.exit(app.exec_())
func2
プログラム全体を StartQT4 クラスの下に置きたくないので、仕事に取り掛かろうとしています。その行の多くのバリエーションを試しましたが、このクラスの外部から GUI 項目にアクセスできないようです。シグナルも送信してみましたが、まだ正しい構文を取得できません。
私の構造が偽物である可能性があるため、ほとんどを投稿しました。基本的に.py
、Designer によって作成されたファイルと、それをインポートするメイン プログラム ファイルがあります。メイン プログラム ファイルには、GUI を開始するためのクラス (および個別のウィンドウごとのクラス) があります。このクラスには、クラスのメソッドを呼び出すシグナルがあります。これらのメソッドは、メイン プログラムまたは作成した他のクラスから関数を呼び出します。プログラムの最後にはif __name__ == "__main__"
、GUI を起動するためのコードがあります。この構造は偽物ですか?私は多くのチュートリアルをオンラインで読みましたが、すべて異なっていたり、時代遅れでした。