私はPySideにちょっと新しいです。一度に1つのウィジェットを表示するメインウィンドウオブジェクトがあります。私は、ボタンを押したときにウィンドウ内に表示されているウィジェットを置き換えるために、QMainWindow
クラスの中央ウィジェットを変更しようとしていました。問題は、押されたボタンがメインウィンドウクラスではなく、ウィジェットクラスにあることです。MainWindowのCentralWidgetを置き換えます。
言う...
class App(QtGui.QMainWindow):
def __init__(self):
super(App, self).__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('Listo.') #Status Bar
self.login_screen = LoginScreen()
self.logged_in_screen = LoggedInScreen()
self.setCentralWidget(self.login_screen)
self.setGeometry(300, 300, 450, 600) #Window Size
self.setWindowTitle('PyTransactio - Client') #Window Title
self.setWindowIcon(QtGui.QIcon('icon.png')) #App Icon
self.show()
押されたボタンはlogin_screen
インスタンスです。ボタンがクリックされたときに呼び出されるメソッドは、LoginScreen
クラスの内部にある:
def login(self):
""" Send login data to the server in order to log in """
#Process
self.setParent(None)
None
に親ウィジェットの設定メインウィンドウからウィジェット(login_screen
)を削除します。 loginButton
(login_screen
ウィジェット内)を押すと、メインウィンドウの中央ウィジェットとして別のウィジェット(例:logged_in_screen
)を取得するにはどうすればよいですか?
ログインメソッドは、メインウィンドウクラス内にある必要がありますか?もしそうなら、どうすればlogin_screen
で押されたボタンをメインウィンドウの方法で接続できますか?
**はQStackedWidget **ことをしました。また、私は 'self.parent()。login'については考えませんでした。私のOOPで作業しなければならないだろうと思う。どうもありがとうございました! –
中央ウィジェットとして設定すると、QMainWindowはそのウィジェットの所有権を取得します。他のウィジェットを中央のウィジェットとして設定すると、最初のウィジェットが破壊されてしまいますが、これは悪いことです。 –
@HrvojeTそうですね、私の答えは 'QStackedWidget'を使用しています。ハックではないので、正しく動作させるには醜いコードが必要になるでしょう。 – Bakuriu