python点击按钮弹出新窗口_python - PyQt5点击button如何弹出新窗口?

问 题

怎么通过点击button,来打开一个新的窗口?

是写在同一个脚本里,还是把新窗口的代码放在另一个脚本里,然后通过点击按钮来运行?

import sys

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

class FirstWindow(QWidget):

def __init__(self):

super().__init__()

self.windowUI()

def windowUI(self):

self.setWindowTitle("Login")

self.textfield()

self.center()

def center(self):

qr = self.frameGeometry()

cp = QDesktopWidget().availableGeometry().center()

qr.moveCenter(cp)

self.move(qr.topLeft())

def textfield(self):

QToolTip.setFont(QFont('SansSerif', 12))

user = QLabel("User:")

userEdit = QLineEdit()

userEdit.setToolTip("请输入你的帐号")

passWord = QLabel("PassWord:")

passWordEdit = QLineEdit()

passWordEdit.setToolTip("请输入你的密码")

grid = QGridLayout()

grid.setSpacing(0)

grid.addWidget(user, 0, 0)

grid.addWidget(userEdit, 1, 0)

grid.addWidget(passWord, 2, 0)

grid.addWidget(passWordEdit, 3, 0)

empty = QLabel()

grid.addWidget(empty, 4, 0)

btn_logon = QPushButton("Log on")

btn_quit = QPushButton("Quit")

grid.addWidget(btn_logon, 5, 0, 1, 2)

grid.addWidget(btn_quit, 6, 0, 1, 2)

btn_logon.clicked.connect(self.onclick)

btn_quit.clicked.connect(quit)

self.setLayout(grid)

def onclick(self):

newWindow = SecondWindow()

newWindow.show()

newWindow.exec_()

class SecondWindow(QWidget):

def __init__(self):

super().__init__

self.newWindowUI

def newWindowUI(self):

self.resize(300,300)

self.move(200,200)

if __name__ == "__main__":

App = QApplication(sys.argv)

ex = FirstWindow()

ex.show()

sys.exit(App.exec_())

解决方案

代码量不大的话,放一个文件就行了,要是代码比较多的话,考虑到维护的方便,还是放在2个里面比较好,这种事件的触发和界面切换一般都是用signal-slot做的,使得语义看起来非常清晰

# -*- coding: utf-8 -*-

import sys

from PyQt5.QtWidgets import *

from PyQt5.QtCore import *

class FirstWindow(QWidget):

close_signal = pyqtSignal()

def __init__(self, parent=None):

# super这个用法是调用父类的构造函数

# parent=None表示默认没有父Widget,如果指定父亲Widget,则调用之

super(FirstWindow, self).__init__(parent)

self.resize(100, 100)

self.btn = QToolButton(self)

self.btn.setText("click")

def closeEvent(self, event):

self.close_signal.emit()

self.close()

class SecondWindow(QWidget):

def __init__(self, parent=None):

super(SecondWindow, self).__init__(parent)

self.resize(200, 200)

self.setStyleSheet("background: black")

def handle_click(self):

if not self.isVisible():

self.show()

def handle_close(self):

self.close()

if __name__ == "__main__":

App = QApplication(sys.argv)

ex = FirstWindow()

s = SecondWindow()

ex.btn.clicked.connect(s.handle_click)

ex.btn.clicked.connect(ex.hide)

ex.close_signal.connect(ex.close)

ex.show()

sys.exit(App.exec_())

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值