PyQt5 多窗口切换系列 一

转载自 https://blog.csdn.net/shangxiaqiusuo1/article/details/85253264

PyQt5 多窗口切换系列 一


 
 
  1. # -*- coding: utf-8 -*-
  2. '''
  3. 多窗口反复切换,只用PyQt5实现
  4. '''
  5. import sys
  6. from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton
  7. class FirstUi(QMainWindow):
  8. def __init__(self):
  9. super(FirstUi, self).__init__()
  10. self.init_ui()
  11. def init_ui(self):
  12. self.resize( 300, 200)
  13. self.setWindowTitle( 'First Ui')
  14. self.btn = QPushButton( 'jump', self)
  15. self.btn.setGeometry( 50, 100, 100, 50)
  16. self.btn.clicked.connect(self.slot_btn_function)
  17. def slot_btn_function(self):
  18. self.hide()
  19. self.s = SecondUi()
  20. self.s.show()
  21. class SecondUi(QWidget):
  22. def __init__(self):
  23. super(SecondUi, self).__init__()
  24. self.init_ui()
  25. def init_ui(self):
  26. self.resize( 500, 350)
  27. self.setWindowTitle( 'Second Ui')
  28. self.btn = QPushButton( 'jump', self)
  29. self.btn.setGeometry( 150, 150, 100, 50)
  30. self.btn.clicked.connect(self.slot_btn_function)
  31. def slot_btn_function(self):
  32. self.hide()
  33. self.f = FirstUi()
  34. self.f.show()
  35. def main():
  36. app = QApplication(sys.argv)
  37. w = FirstUi()
  38. w.show()
  39. sys.exit(app.exec_())
  40. if __name__ == '__main__':
  41. main()

注意,如果你发现你的多界面切换的时候出现闪退的情况,请注意,


 
 
  1. def slot_btn_function(self):
  2. self.hide()
  3. self.s = SecondUi()
  4. self.s.show()

上面的这个函数里面,打开第二个界面的时候,一定要在实例化对象的前面加上self,问题解决。

更新:新增用自定义信号和槽函数来打开第二个窗口,框架如下所示:其中要注意,自定义的信号要写在类的下面,而不要写进类里面的函数,不然会报错找不到connect。


 
 
  1. # -*- coding: utf-8 -*-
  2. import sys
  3. from PyQt5.QtCore import pyqtSignal
  4. from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
  5. class one(QMainWindow):
  6. sig_1 = pyqtSignal()
  7. def __init__(self):
  8. super(one, self).__init__()
  9. self.init_ui()
  10. def init_ui(self):
  11. self.resize( 300, 200)
  12. self.setWindowTitle( '1')
  13. self.btn_1 = QPushButton(self)
  14. self.btn_1.setText( 'Emit')
  15. self.btn_1.setGeometry( 100, 80, 100, 40)
  16. self.btn_1.clicked.connect(self.slot_btn_1)
  17. self.sig_1.connect(self.sig_1_slot)
  18. def slot_btn_1(self):
  19. self.sig_1.emit()
  20. def sig_1_slot(self):
  21. self.t = two()
  22. self.t.show()
  23. class two(QMainWindow):
  24. def __init__(self):
  25. super(two, self).__init__()
  26. self.resize( 500, 100)
  27. self.setWindowTitle( 'two')
  28. def ui_main():
  29. app = QApplication(sys.argv)
  30. w = one()
  31. w.show()
  32. sys.exit(app.exec_())
  33. if __name__ == '__main__':
  34. ui_main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值