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()
### 如何在Python Tkinter中实现界面切换 为了实现在Tkinter应用程序中的界面切换,可以创建多个框架并将其放置在一个容器内。通过提升特定的框架到顶层来显示不同的页面。下面是一个简单的例子展示如何管理不同页面之间的转换。 #### 创建基础类用于处理页面切换逻辑 定义一个`App`类继承自`tk.Tk`,该类负责初始化应用窗口以及提供方法用来切换当前可见的页面: ```python import tkinter as tk class App(tk.Tk): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) container = tk.Frame(app) container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) app.frames = {} for F in (StartPage, PageOne): # 添加更多页面到这里 frame_name = F.__name__ frame = F(parent=container, controller=self) self.frames[frame_name] = frame frame.grid(row=0, column=0, sticky="nsew") show_frame('StartPage') def show_frame(self, page_name): '''Show a frame for the given page name''' frame = self.frames[page_name] frame.tkraise() ``` 此部分代码设置了一个名为`container`的容器,它包含了所有的页面实例,并允许这些页面被堆叠在一起[^1]。 #### 定义各个页面作为单独的Frame子类 每个页面都作为一个独立于其他组件存在的`tk.Frame`对象存在。这里展示了两个基本页面——启动页(`StartPage`)和第一个功能页(PageOne): ```python class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) label = tk.Label(self, text="This is the start page") label.pack() button1 = tk.Button( self, text="Go to Page One", command=lambda: controller.show_frame("PageOne"), ) button1.pack() class PageOne(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) label = tk.Label(self, text="This is page one") label.pack() button1 = tk.Button( self, text="Back to Home", command=lambda: controller.show_frame("StartPage"), ) button1.pack() ``` 上述两段代码分别实现了两个具有按钮链接至另一页面的功能页面。当点击相应按钮时会触发控制器内的`show_frame()`函数从而改变所见的内容。 #### 启动程序 最后一步就是运行整个GUI应用程序: ```python if __name__ == "__main__": app = App() app.mainloop() ``` 这样就完成了一个可以在不同页面之间导航的基础Tkinter GUI 应用程序结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值