python - PyQt5点击button如何弹出新窗口?
黄舟
黄舟 2017-04-17 17:53:12
0
2
1877

怎么通过点击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_())
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(2)
左手右手慢动作

Jika jumlah kod tidak besar, masukkan sahaja dalam satu fail Jika terdapat banyak kod, memandangkan kemudahan penyelenggaraan, adalah lebih baik untuk meletakkannya dalam dua fail Peristiwa dan antara muka pensuisan biasanya menggunakan isyarat- Dibuat oleh slot, semantik kelihatan sangat jelas

# -*- 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_())
巴扎黑

-- pengekodan: utf-8 --

sistem import
daripada import PyQt5.QtWidgets *
daripada import PyQt5.QtCore *

kelas FirstWindow(QWidget):

close_signal = pyqtSignal()
def __init__(self, parent=None):
    # super这个用法是调用父类的构造函数,parent=None表示默认没有父Widget,如果有则调用之
    super(FirstWindow, self).__init__(parent)
    self.resize(800, 600)
    self.setMaximumSize(QSize(800, 600))
    self.btn = QToolButton(self)
    self.btn.setText("click")
    self.two = SecondWindow()
    self.btn.clicked.connect(self.two.handle_click)
    #self.btn.clicked.connect(self.hide)
    self.close_signal.connect(self.closeSlot)
    print("FirstWindow")

def closeEvent(self, event):
    print("close signal emit by FirstWindow")
    self.close_signal.emit()
    #self.close()

def closeSlot(self):
    print("close signal slot to SecondWindow")
    self.two.close()

kelas SecondWindow(QWidget):

close_signal = pyqtSignal()
def __init__(self, parent=None):
    super(SecondWindow, self).__init__(parent)
    self.resize(800, 600)
    self.setMaximumSize(QSize(800, 600))
    self.setStyleSheet("background: black")
    self.close_signal.connect(self.closeSlot)
    
def handle_click(self):
    if not self.isVisible():
        self.show()
        print("SecondWindow")

def closeEvent(self, event):
    print("close signal emit by SecondWindow")
    self.close_signal.emit()
    #self.close()

def closeSlot(self):
    print("close signal slot to FirstWindow")
    one.close()

jika nama == "__main__":

App = QApplication(sys.argv)
one = FirstWindow()
one.show()
sys.exit(App.exec_())
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan