Python 窗口界面切换

通过点击按钮实现两个窗口进行切换

创建第一个窗口

在这里插入图片描述

class window_1(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Window 1')
        self.resize(400,300)
        self.button1 = QPushButton('Button1',self)
        self.button1.move(100,50)

创建第二个窗口

class window_2(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Window 2')
        self.resize(400,300)
        self.button2 = QPushButton('Button2',self)
        self.button2.move(100,50)

在这里插入图片描述

窗口切换

class switcher:
    def __init__(self, window_1,window_2):
        self.window1 = window_1
        self.window2 = window_2
        self.window1.button1.clicked.connect(self.switch_to_window2)
        self.window2.button2.clicked.connect(self.switch_to_window1)

    def switch_to_window2(self):
        self.window1.hide()
        self.window2.show()

    def switch_to_window1(self):
        self.window2.hide()
        self.window1.show()

完整代码

import sys
from PySide6.QtWidgets import QApplication, QPushButton,QWidget

class window_1(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Window 1')
        self.resize(400,300)
        self.button1 = QPushButton('Button1',self)
        self.button1.move(100,50)

class window_2(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Window 2')
        self.resize(400,300)
        self.button2 = QPushButton('Button2',self)
        self.button2.move(100,50)


class switcher:
    def __init__(self, window_1,window_2):
        self.window1 = window_1
        self.window2 = window_2
        self.window1.button1.clicked.connect(self.switch_to_window2)
        self.window2.button2.clicked.connect(self.switch_to_window1)

    def switch_to_window2(self):
        self.window1.hide()
        self.window2.show()

    def switch_to_window1(self):
        self.window2.hide()
        self.window1.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window_1 = window_1()
    window_2 = window_2()
    s = switcher(window_1,window_2)
    window_1.show()
    sys.exit(app.exec())

更多示例

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton
 
 
class Window1(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()
 
    def init_ui(self):
        self.resize(400, 300)
        self.setWindowTitle('Window1')
        self.button1 = QPushButton('Button 1', self)
        self.button1.move(150,100)
        self.button1.clicked.connect(self.switch_to_window2)
 
    def switch_to_window2(self):
        self.hide()
        self.s = Window2()
        self.s.show()
 
 
class Window2(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
 
    def init_ui(self):
        self.resize(400, 300)
        self.setWindowTitle('Window2')
        self.button2 = QPushButton('Button 2', self)
        self.button2.move(120,100)
        self.button2.clicked.connect(self.switch_to_window1)
 
    def switch_to_window1(self):
        self.hide()
        self.f = Window1()
        self.f.show() 

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Window1()
    w.show()
    sys.exit(app.exec())

多子窗口切换

from PySide6.QtWidgets import QApplication, QMainWindow, QMdiArea, QMdiSubWindow, QWidget
from PySide6.QtCore import Qt  
import sys
from ui_main import Ui_MainWindow
from ui_gui1 import Ui_gui1
from ui_gui2 import Ui_gui2

class gui1(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_gui1()
        self.ui.setupUi(self) 

class gui2(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_gui2()
        self.ui.setupUi(self) 


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.add_subwindow()
        self.btn_clicked()


    def add_subwindow(self): # 添加子窗口
        self.sub_window1 = self.ui.mdiArea.addSubWindow(gui1())
        self.sub_window1.setWindowFlags(Qt.FramelessWindowHint)# 隐藏边框        
        self.sub_window1.showMaximized()        
        self.sub_window2 = self.ui.mdiArea.addSubWindow(gui2())
        self.sub_window2.setWindowFlags(Qt.FramelessWindowHint)
        self.sub_window2.hide()


    def btn_clicked(self): # 按钮 点击
        self.ui.pushButton.clicked.connect(lambda: self.switch_window(self.sub_window1))
        self.ui.pushButton_2.clicked.connect(lambda: self.switch_window(self.sub_window2))

    def switch_window(self,sub_window): # 子窗口切换
        for sub in self.ui.mdiArea.subWindowList():
            sub.hide()
        sub_window.showMaximized()     
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python tkinter界面切换可以通过以下步骤实现: 1. 创建多个Frame,每个Frame对应一个界面。 2. 将这些Frame添加到主窗口中。 3. 使用grid()或pack()方法将其中一个Frame设置为当前显示的界面。 4. 在需要切换界面的时候,使用grid_forget()或pack_forget()方法隐藏当前界面,然后使用grid()或pack()方法显示需要切换到的界面。 例如,以下代码演示了如何实现两个界面之间的切换: ``` import tkinter as tk class App(tk.Tk): def __init__(self): super().__init__() self.title("界面切换") self.geometry("300x200") # 创建两个Frame self.frame1 = tk.Frame(self) self.frame2 = tk.Frame(self) # 在Frame1中添加控件 tk.Label(self.frame1, text="这是第一个界面").pack() tk.Button(self.frame1, text="切换到第二个界面", command=self.show_frame2).pack() # 在Frame2中添加控件 tk.Label(self.frame2, text="这是第二个界面").pack() tk.Button(self.frame2, text="切换到第一个界面", command=self.show_frame1).pack() # 将两个Frame添加到主窗口中 self.frame1.grid(row=, column=, padx=10, pady=10) self.frame2.grid(row=, column=, padx=10, pady=10) # 显示第一个界面 self.show_frame1() def show_frame1(self): self.frame2.grid_forget() # 隐藏第二个界面 self.frame1.grid() # 显示第一个界面 def show_frame2(self): self.frame1.grid_forget() # 隐藏第一个界面 self.frame2.grid() # 显示第二个界面 if __name__ == "__main__": app = App() app.mainloop() ``` 在这个例子中,我们创建了两个Frame,分别对应两个界面。在主窗口中,我们将这两个Frame都添加进去,并使用grid()方法将第一个Frame设置为当前显示的界面。在切换界面的时候,我们使用grid_forget()方法隐藏当前界面,然后使用grid()方法显示需要切换到的界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值