如何展现另一种风

2024-04-27 05:15:16 发布

您现在位置:Python中文网/ 问答频道 /正文

项目在登录和登录时发生。你知道吗

我正在尝试从registerwindow过渡到mainwindow,当我们提交时,窗口会自动过渡到mainwindow。只有这样做(至少对我来说)我必须导入两个名为主窗口.py以及寄存器.py,顺便说一句,它们在同一个文档中。你知道吗

这就是主菜单.py你知道吗

from PyQt5 import QtCore,QtGui,QtWidgets

from window.register import Ui_Form

class Ui_MainWindow(object):


def login(self):

    self.window = QtWidgets.QWidget()
    self.ui = Ui_Form()
    self.ui.setupUi(self.window)
    self.window.show()
    MainWindow.hide()

这就是寄存器.py你知道吗

from PyQt5 import QtCore, QtGui, QtWidgets

from window.mainmenu import Ui_MainWindow

import sqlite3

class Ui_Form(object):
def submit(self):
    sorgu2 = "Select * From users where nickname = ?"
    sorgu = "INSERT INTO users values(?,?)"
    self.cursor.execute(sorgu,(self.lineEdit.text(),self.lineEdit.text()))
    self.connect.commit()
    Form.hide()
    self.window2 = QtWidgets.QMainWindow()
    self.ui2 = Ui_MainWindow()
    self.ui2.setupUi(self.window2)
    self.window2.show()

它应该是当我点击按钮注册窗口将被隐藏和主菜单窗口将显示。主菜单也一样,但正好相反

我知道我在做循环依赖的导入,但是除了将它们相互导入之外没有其他方法


Tags: frompyimportselfformui菜单window
1条回答
网友
1楼 · 发布于 2024-04-27 05:15:16

如果第二个窗口是QDialog,那么您可以隐藏主窗口,使用exec()表示QDialog,主窗口将等待您关闭QDialog,当它返回主窗口时,您可以再次显示它。你知道吗

from PyQt5 import QtWidgets


class MainWindow(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.button = QtWidgets.QPushButton("Show Second Window", self)
        self.button.clicked.connect(self.show_second_window)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.button)

        self.show()

    def show_second_window(self):
        self.hide() # hide main window

        self.second = SecondWindow()
        self.second.exec() # will wait till you close second window

        self.show() # show main window again


class SecondWindow(QtWidgets.QDialog): # it has to be dialog

    def __init__(self):
        super().__init__()

        self.button = QtWidgets.QPushButton("Close It", self)
        self.button.clicked.connect(self.show_second_window)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.button)

        self.show()

    def show_second_window(self):
        self.close() # go back to main window


app = QtWidgets.QApplication([])
main = MainWindow()
app.exec()

另一种流行的方法是创建两个包含所有内容的小部件,并替换一个窗口中的小部件。你知道吗

from PyQt5 import QtWidgets


class MainWidget(QtWidgets.QWidget):

    def __init__(self, parent):
        super().__init__()

        self.parent = parent

        self.button = QtWidgets.QPushButton("Show Second Window", self)
        self.button.clicked.connect(self.show_second_window)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.button)

        self.show()

    def show_second_window(self):
        self.close()
        self.parent.set_content("Second")


class SecondWidget(QtWidgets.QWidget):

    def __init__(self, parent):
        super().__init__()

        self.parent = parent

        self.button = QtWidgets.QPushButton("Close It", self)
        self.button.clicked.connect(self.show_second_window)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.button)

        self.show()

    def show_second_window(self):
        self.close()
        self.parent.set_content("Main")


class MainWindow(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.layout = QtWidgets.QVBoxLayout(self)

        self.set_content("Main")

        self.show()

    def set_content(self, new_content):
        if new_content == "Main":
            self.content = MainWidget(self)
            self.layout.addWidget(self.content)
        elif new_content == "Second":           
            self.content = SecondWidget(self)
            self.layout.addWidget(self.content)



app = QtWidgets.QApplication([])
main = MainWindow()
app.exec()

编辑:使用QStackedLayout更改窗口内容

from PyQt5 import QtWidgets


class FirstWidget(QtWidgets.QWidget):

    def __init__(self, parent=None):
        super().__init__(parent=parent)

        layout = QtWidgets.QVBoxLayout(self)

        self.button = QtWidgets.QPushButton("Show Second Stack", self)
        self.button.clicked.connect(self.change_stack)

        layout.addWidget(self.button)

    def change_stack(self):
        self.parent().stack.setCurrentIndex(1)


class SecondWidget(QtWidgets.QWidget):

    def __init__(self, parent=None):
        super().__init__(parent=parent)

        layout = QtWidgets.QVBoxLayout(self)

        self.button = QtWidgets.QPushButton("Show First Stack", self)
        self.button.clicked.connect(self.change_stack)

        layout.addWidget(self.button)

    def change_stack(self):
        self.parent().stack.setCurrentIndex(0)


class MainWindow(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()

        self.stack = QtWidgets.QStackedLayout(self)

        self.stack1 = FirstWidget(self)
        self.stack2 = SecondWidget(self)

        self.stack.addWidget(self.stack1)
        self.stack.addWidget(self.stack2)

        self.show()



app = QtWidgets.QApplication([])
main = MainWindow()
app.exec()

相关问题 更多 >