簡體   English   中英

Pyqt 5 新窗口崩潰 Mainwindow

[英]Pyqt 5 new Window crashes Mainwindow

我有一個 MainWindow,我想在其中打開一個新窗口。

新窗口:

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

# Form implementation generated from reading ui file 'C:\Users\Tareq\Desktop\table.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(703, 449)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(0, 0, 701, 401))
        self.tableWidget.setRowCount(48)
        self.tableWidget.setColumnCount(4)
        self.tableWidget.setObjectName("tableWidget")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 703, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我按照說明添加到我的主窗口

    self.pushButton_2.clicked.connect(self.create_new_window)

以及以下功能:

def create_new_window(self):
    from tableWindow import Ui_MainWindow
    self.tableWindow = Ui_MainWindow
    self.tableWinow.show()

但是在按下 button2 后,程序崩潰了,沒有給定的錯誤......

進程以退出代碼 1 結束

正如 eyllanesc 所說,這可能是因為您在使用之前沒有導入 QMainWindow。 但是,即便如此,您還是覺得您在創建自己的窗口子類化“對象”方面做得太多了。 將 QMainWindow 子類化並讓它完成繁重的工作會容易得多(更 Pythonic?)。

試試這個小例子:

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import *

class Second(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Second, self).__init__(parent)
        #Setting a title, locating and sizing the window
        self.title = 'My Second Window'
        self.left = 200
        self.top = 200
        self.width = 500
        self.height = 500
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.pushButton = QtWidgets.QPushButton("Close Me", self)
        self.pushButton.clicked.connect(self.on_pushButton_clicked)
        self.pushButton.move(120,120)

    def on_pushButton_clicked(self):
        self.close()

class First(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(First, self).__init__(parent)
        self.title = 'My First Window'
        self.left = 100
        self.top = 100
        self.width = 500
        self.height = 500
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.pushButton = QtWidgets.QPushButton("Open Me", self)
        self.pushButton.move(120,120)
        self.pushButton.clicked.connect(self.on_pushButton_clicked)      
        self.newWindow = Second(self)

    def on_pushButton_clicked(self):
        self.newWindow.show()

app = QtWidgets.QApplication(sys.argv)
main = First()
main.show()
sys.exit(app.exec_())

它只是通過一個按鈕從另一個窗口打開一個窗口。

PyQt5 窗口崩潰沒有錯誤

我也有崩潰的主窗口,沒有顯示任何錯誤。 如果不找出代碼中發生錯誤的位置,就很難調試代碼。 我建議在代碼頂部使用以下導入,您將在終端上打印錯誤異常

import cgitb
cgitb.enable(format = 'text')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM