簡體   English   中英

self.close 和 self.hide 在 pyqt5 中不起作用

[英]self.close and self.hide not working in pyqt5

我是python的新手。 我正在使用 pyqt5 進行 GUI 開發。 我有一個主窗口,單擊按鈕后應該關閉並出現新對話框。 但它不會關閉,也不會顯示任何錯誤並打開 nextDialog。 我還想在 nextDialog 中單擊 OK 按鈕時關閉 nextDialog。 請幫助檢查問題。 我正在嘗試開發一個新項目,但卡在這個問題上。 代碼如下。

主文件

from PyQt5 import QtCore, QtGui, QtWidgets
from nextDialog import Ui_Dialog

class Ui_MainWindow(QtWidgets.QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(370, 171)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(110, 50, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)

        self.pushButton.clicked.connect(self.opennext)

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

    def opennext(self):
        self.Dialog = QtWidgets.QDialog()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self.Dialog)
        self.Dialog.show()
        self.close() #Not working

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


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_())

    from PyQt5 import QtCore, QtGui, QtWidgets
    import sys

下一個對話框.py

class Ui_Dialog(QtWidgets.QMainWindow):
    def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(346, 182)
    self.pushButton = QtWidgets.QPushButton(Dialog)
    self.pushButton.setGeometry(QtCore.QRect(110, 80, 75, 23))
    self.pushButton.setObjectName("pushButton")

    self.pushButton.clicked.connect(self.exit)

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

    def exit(self):
        self.hide() #This also not working, I want either of these two to 
                    #work

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "OK"))

嘗試一下:

主文件

from PyQt5 import QtCore, QtGui, QtWidgets
from nextDialog import Ui_Dialog

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.centralwidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralwidget)
        self.pushButton = QtWidgets.QPushButton("Open", self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(110, 50, 75, 23))

        self.pushButton.clicked.connect(self.opennext)

    def opennext(self):
        self.Dialog = QtWidgets.QDialog()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self.Dialog)
        self.Dialog.show()
        self.close() #Not working

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

下一個對話框.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(QtWidgets.QMainWindow):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(346, 182)
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(110, 80, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.pushButton.clicked.connect(Dialog.close)      # <---

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "OK"))

嗨,有點難以理解你的代碼,我只使用 Designer 來制作我的 GUI,

無論如何,我為您的 main.py 制作了拼圖的第一部分

第 4 行應讀取class Ui_MainWindow(object):

並關閉關於車道 25 的第一個窗口使用MainWindow.close()

一開始也添加了import sys ,這里是代碼

主要.py:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 18 17:43:19 2020

@author: Pietro
"""

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from nextDialog import Ui_Dialog

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(370, 171)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(110, 50, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)

        self.pushButton.clicked.connect(self.opennext)

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

    def opennext(self):
        self.Dialog = QtWidgets.QDialog()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self.Dialog)
        self.Dialog.show()
        MainWindow.close()

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


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

這個打開的第一個窗口然后在按下打開按鈕並出現新窗口時關閉它,謎語的第二部分需要更長的時間我會盡快嘗試一下

來自下面答案的 Dialog.py 似乎工作不知道為什么(也不知道 main.py 是如何工作的,但對我來說 def exit 不起作用的事實更不合邏輯)。

下一個對話框.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 18 17:43:19 2020

@author: Pietro
"""

import sys
from PyQt5 import QtCore, QtGui, QtWidgets



class Ui_Dialog(QtWidgets.QMainWindow):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(346, 182)
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(110, 80, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.pushButton.clicked.connect(Dialog.close)  # as answer below dont know why def  exit doesnt work

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


#    def exit(self):
#        print('exit' *5)
#        Dialog.close()

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "OK"))


暫無
暫無

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

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