2017-01-25 19 views
0

私はこれらの問題に対して他のスレッドからの複数のソリューションを見てきましたが、私が試みたすべてがうまくいきませんでした。私はすべてのフレームを開き、単にそれらの間を切り替えることを試みています、あなたがtkinterで行うことができるように。ウィンドウ間の切り替えPyQt4 Python 3.5

Tkinterのコード:

#Location Of All Frames 
    Container = tk.Frame(self) 
    Container.pack(side="top", fill="both", expand=True) 
    Container.grid_rowconfigure(0, weight=1) 
    Container.grid_columnconfigure(0, weight=1) 
    self.Container = Container 

    #Loop To Select Frames 
    self.Frames = {} 
    for F in (Login, Admin, User): 
     PageName = F.__name__ 
     Frame = F(parent=Container, controller=self) 
     self.Frames[PageName] = Frame 

     #Allign Frame 
     Frame.grid(row=0, column=0, sticky="nsew") 

    #Call Function Show Frame 
    self.show_frame(Login) 

#Function To Call When Switching Frame 
def show_frame(self, PageName): 
    #If Instance Not Created, Create Instance 
    if PageName not in self.Frames: 
     self.Frames[PageName] = PageName(self.Container, self) 
    Frame = self.Frames[PageName] 
    Frame.tkraise() 

私はPyQt4のためにこれを再作成しようとしているが、これまでのところ成功していません。 私が達成しようとしているのは、

ログインページから始めてください。 ログイン(QtGui.QWidget) そして、一旦ログインすると、ボタンが押されます。次のウィンドウに切り替えます。 プログラムには、複数の異なるレイアウトが切り替えられる必要があります。

現在のコード:

class Application(QtGui.QMainWindow): #This was a solution from someone else that doesn't seem to work 
    def __init__(self, parent=None): 
     super(Application).__init__(parent) 
     self.central_widget = QtGui.QStackedWidget() 
     self.setCentralWidget(self.central_widget) 
     login_widget = LoginWidget(self) 
     login_widget.button.clicked.connect(self.Login) 
     self.central_widget.addWidget(login_widget) 

    def Login(self): 
     logged_in_widget = Admin(self) 
     self.central_widget.addWidget(logged_in_widget) 
     self.central_widget.setCurrentWidget(logged_in_widget) 

私もページ数が多いためとして、非効率的な参照してください。この方法。

class LoginWidget(QtGui.QWidget): 
    def __init__(self): 
     super(Application, self).__init__() 
     self.initUI() #Call Initialize UI function 

    def initUI(self): 
     self.showFullScreen() 
     (...) 

    class Admin(QtGui.QWidget): 
    def __init__(self): 
     super(Application, self).__init__() 
     self.initUI() #Call Initialize UI function 

    def initUI(self): 
     self.showFullScreen() 
     (...) 

まだ他のウィンドウは作成されていません。

ご協力いただければ幸いです。

+0

これまでにpyqt4で何を試しましたか?あなたのコードを投稿してください – PYPL

+0

@PYPLそこに行く! – Jake

答えて

0

注:py2.7で書かがここpy3.5

の調整を必要とするかもしれない私は1つのウィジェットですべてを入れているので、別のダイアログをpopingお勧めでしょうが、あなたはqStackedWidgetを使用するソリューションであるおそらくあなたが遅くなりますプログラム

from PyQt4 import QtGui, QtCore 
import sys 

class StackedWidget(object): 
    def setupUi(self, Dialog): 
     Dialog.resize(400, 121) 
     self.page = QtGui.QWidget() 
     self.stackedWidget = QtGui.QStackedWidget(Dialog) 
     self.verticalLayout_3 = QtGui.QVBoxLayout(Dialog) 
     self.verticalLayout = QtGui.QVBoxLayout() 
     self.verticalLayout_4 = QtGui.QVBoxLayout(self.page) 
     self.lineEdit = QtGui.QLineEdit(self.page) 
     self.verticalLayout_4.addWidget(self.lineEdit) 
     self.lineEdit_2 = QtGui.QLineEdit(self.page) 
     self.verticalLayout_4.addWidget(self.lineEdit_2) 
     self.pushButton = QtGui.QPushButton(self.page) 
     self.verticalLayout_4.addWidget(self.pushButton) 
     self.stackedWidget.addWidget(self.page) 
     self.page_2 = QtGui.QWidget() 
     self.verticalLayout_6 = QtGui.QVBoxLayout(self.page_2) 
     self.radioButton_2 = QtGui.QRadioButton(self.page_2) 
     self.verticalLayout_6.addWidget(self.radioButton_2) 
     self.radioButton = QtGui.QRadioButton(self.page_2) 
     self.verticalLayout_6.addWidget(self.radioButton) 
     self.stackedWidget.addWidget(self.page_2) 
     self.verticalLayout.addWidget(self.stackedWidget) 
     self.verticalLayout_3.addLayout(self.verticalLayout) 
     self.stackedWidget.setCurrentIndex(0) 

     self.lineEdit.setPlaceholderText("Login") 
     self.lineEdit_2.setPlaceholderText("Password") 
     self.pushButton.setText("Sign-In") 
     self.radioButton.setText("RadioButton") 
     self.radioButton_2.setText("RadioButton") 

class MultiFrameWidget(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.ui = StackedWidget() 
     self.ui.setupUi(self) 
     self.ui.pushButton.clicked.connect(self.signin) 

    def signin(self): 
     self.ui.stackedWidget.setCurrentIndex(int(self.ui.stackedWidget.currentIndex())+1) 

app = QtGui.QApplication(sys.argv) 
widget = MultiFrameWidget() 
widget.show() 
sys.exit(app.exec_()) 
+0

パーフェクト!それを信じるかどうか、Python 3.5に変更する必要はありません。 – Jake

関連する問題