PyQt コードを分割するのに非常に問題があります:
main.py
(PyQt modules)
from titles import *
appl = QApplication(sys.argv)
from main import Ui_MainWindow
class Main(QMainWindow):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
QMainWindow.__init__(self)
self.u = Ui_MainWindow()
self.u.setupUi(self)
Titles(self)
titles.py
import sys
(PyQt modules)
(dbconnections)
class Titles():
def __init__(self, a): #<-- APP IS PASSED AS ARGUMENT AND NOW CALLED 'A'
a.u.table.setModel(titles)
a.u.lineEdit.setText("Titles Init")
a.u.add.clicked.connect(titles.insertRow)
class TitlesTableModel(QSqlTableModel):
def __init__(self):
QSqlTableModel.__init__(self)
self.setTable("titles")
self.setEditStrategy(self.OnFieldChange)
self.select()
def insertRow(self):
return self.insertRecord(-1, self.record())
a.u.lineEdit.setText("Insert Title")
titles = Titles()
main.py を実行すると、すべてのデータが読み込まれます。QPushButton は行を挿入しますが、"a" がグローバルに定義されていないため、lineEdit を "Insert Title" に設定しません。ほとんどの場合、main.py の読み込み時にトリガーされる titles.py で関数を作成しようとしましたが、次のようになります。
a = 0 #<-- THIS WAS A LAST STRAW AS WARNED BY RESEARCHING OTHERS, BUT AM LOST
def start(app):
global a
a = app
Titles(a); TitlesTableModel(a) #<-- EVEN THOUGH TITLES.PY IS IMPORTED, IT DIDN'T INCLUDE THE APP REFERENCE, SO AM TRYING TO 'REFRESH' THE TITLESTABLEMODEL
...with Titles & TitlesTableModel requiring an extra argument (self, a)
これはデータと関数をロードしますが、insertRow は lineEdit を更新しません。
その他の試みは、Songs クラスを次のように変更します。
class Songs():
def __init__(self, a):
titles = Titles(a)
...(rest the same)
...そして、モデル定義の下から titles=Titles() を削除します。これもデータを表示しますが、「追加」を押しても lineEdit は更新されません。
最終的には、titles.py には「from main import *」が必要だと思われますが、メイン アプリケーションのインスタンスは titles.py が呼び出された後に定義され、main.Main をインポートすると再帰が作成されます。「from main import Main」を介して複数回継承し、「class Songs(Main)」を記述しようとしましたが (これにより、Songs は参照を渡さずに UI を使用できます)、再帰が発生します。今日の 9 時間と、他の人を見る前の 3 週間ということで、本当に困惑しています。' builtin 'の構成ファイルを使用することを推奨する人もいますが、それは非常に悪いようです。
よろしく