简体   繁体   English

在pyqt4中,如何从现有窗口中打开新窗口?

[英]In pyqt4, How do i open new window from existing one?

I want to open new window from existing one in pyqt. 我想从pyqt中的现有窗口打开新窗口。

My source code has two functions. 我的源代码有两个功能。

  • one functions : when button is clicked, File Dialog is opened. 一种功能:单击按钮时,将打开文件对话框。 another functions : when another button is clicked, New Window is opened. 其他功能:单击另一个按钮时,将打开“新窗口”。

But When I want to New window, error message occurs : 但是,当我要到新窗口时,会出现错误消息:

Traceback (most recent call last): File "C:\\Users\\Han\\Desktop\\project\\prototype\\newwindow.py", line 61, in check_start self.w.show() AttributeError: 'Ui_dialog' object has no attribute 'show' 追溯(最近一次通话):文件“ C:\\ Users \\ Han \\ Desktop \\ project \\ prototype \\ newwindow.py”,行61,位于check_start self.w.show()中AttributeError:'Ui_dialog'对象没有属性'节目'

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
    return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(518, 349)
        self.label = QtGui.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(40, 40, 141, 16))
        self.label.setObjectName(_fromUtf8("label"))
        self.label_2 = QtGui.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(400, 330, 141, 16))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.horizontalLayoutWidget = QtGui.QWidget(Form)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(70, 200, 381, 31))            self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
        self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.textEdit = QtGui.QTextEdit(self.horizontalLayoutWidget)
        self.textEdit.setObjectName(_fromUtf8("textEdit"))
        self.horizontalLayout.addWidget(self.textEdit)
        self.pushButton = QtGui.QPushButton(self.horizontalLayoutWidget)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.horizontalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtGui.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(230, 270, 75, 23))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))

        self.retranslateUi(Form)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.file_open)
        QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), self.check_start)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Off_Strip", None))
        self.label.setText(_translate("Form", "123", None))
        self.label_2.setText(_translate("Form", "@Copyright MokLab", None))
        self.pushButton.setText(_translate("Form", "123", None))
        self.pushButton_2.setText(_translate("Form", "123!", None))

    def file_open(self):
        fname = QtGui.QFileDialog.getOpenFileName()
        f = open(fname, 'r')
        f.close()

    def check_start(self):
        self.w = Ui_dialog()
        self.w.show()

class Ui_dialog(object):
    def setupUi(self, dialog):
        dialog.setObjectName(_fromUtf8("dialog"))
        dialog.resize(400, 300)
        self.pushButton = QtGui.QPushButton(dialog)
        self.pushButton.setGeometry(QtCore.QRect(190, 130, 75, 23))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.radioButton = QtGui.QRadioButton(dialog)
        self.radioButton.setGeometry(QtCore.QRect(30, 70, 90, 16))
        self.radioButton.setObjectName(_fromUtf8("radioButton"))
        self.radioButton_2 = QtGui.QRadioButton(dialog)
        self.radioButton_2.setGeometry(QtCore.QRect(40, 110, 90, 16))
        self.radioButton_2.setObjectName(_fromUtf8("radioButton_2"))

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

    def retranslateUi(self, dialog):
        dialog.setWindowTitle(_translate("dialog", "Form", None))
        self.pushButton.setText(_translate("dialog", "PushButton", None))
        self.radioButton.setText(_translate("dialog", "RadioButton", None))
        self.radioButton_2.setText(_translate("dialog", "RadioButton", None))

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

The line self.w.show , where you've declared w as a Ui_dialog object, will attempt to call the show instance variable inside Ui_dialog , which doesn't work because you've never defined any function called show . self.w.show行中,您已将w声明为Ui_dialog对象,该行将尝试在Ui_dialog内部调用show实例变量,该变量Ui_dialog ,因为您从未定义过任何称为show函数。

It doesn't help that you've inherited object for class Ui_dialog . 您已经继承了类Ui_dialog object ,这Ui_dialog You should probably inherit QtGui.QDialog for that class, and rewrite your class accordingly. 您可能应该继承QtGui.QDialog ,并相应地重写您的类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM