2013-05-30 108 views
1

我有两个.ui文件,我用pyuic转换为python文件。我现在想要做的是从另一个开放。麻烦从另一个python(2.7)文件打开Qt4 python文件

代码的主窗口:第二个窗口

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

# Form implementation generated from reading ui file 'text.ui' 
# 
# Created: Thu May 30 11:40:12 2013 
#  by: PyQt4 UI code generator 4.10 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 
from hi import Ui_Dialog 

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_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(800, 600) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 
     self.pushButton = QtGui.QPushButton(self.centralwidget) 
     self.pushButton.setGeometry(QtCore.QRect(10, 520, 98, 27)) 

     ##Connects the clicked event to the open function 
     self.pushButton.clicked.connect(self.open) 


     self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     self.textEdit = QtGui.QTextEdit(self.centralwidget) 
     self.textEdit.setGeometry(QtCore.QRect(60, 60, 541, 121)) 
     self.textEdit.setObjectName(_fromUtf8("textEdit")) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25)) 
     self.menubar.setObjectName(_fromUtf8("menubar")) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName(_fromUtf8("statusbar")) 
     MainWindow.setStatusBar(self.statusbar) 

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

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) 
     self.pushButton.setText(_translate("MainWindow", "PushButton", None)) 

    def open(self): 



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

代码(对话):

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

# Form implementation generated from reading ui file 'hi.ui' 
# 
# Created: Thu May 30 11:41:17 2013 
#  by: PyQt4 UI code generator 4.10 
# 
# WARNING! All changes made in this file will be lost! 

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_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName(_fromUtf8("Dialog")) 
     Dialog.resize(400, 300) 
     self.buttonBox = QtGui.QDialogButtonBox(Dialog) 
     self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32)) 
     self.buttonBox.setOrientation(QtCore.Qt.Horizontal) 
     self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) 
     self.buttonBox.setObjectName(_fromUtf8("buttonBox")) 
     self.tabWidget = QtGui.QTabWidget(Dialog) 
     self.tabWidget.setGeometry(QtCore.QRect(0, 10, 391, 161)) 
     self.tabWidget.setObjectName(_fromUtf8("tabWidget")) 
     self.tab = QtGui.QWidget() 
     self.tab.setObjectName(_fromUtf8("tab")) 
     self.textEdit = QtGui.QTextEdit(self.tab) 
     self.textEdit.setGeometry(QtCore.QRect(130, 40, 104, 78)) 
     self.textEdit.setObjectName(_fromUtf8("textEdit")) 
     self.tabWidget.addTab(self.tab, _fromUtf8("")) 
     self.tab_2 = QtGui.QWidget() 
     self.tab_2.setObjectName(_fromUtf8("tab_2")) 
     self.tabWidget.addTab(self.tab_2, _fromUtf8("")) 

     self.retranslateUi(Dialog) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) 
     self.textEdit.setHtml(_translate("Dialog", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" 
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" 
"p, li { white-space: pre-wrap; }\n" 
"</style></head><body style=\" font-family:\'Ubuntu\'; font-size:11pt; font-weight:400; font-style:normal;\">\n" 
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">hi</p></body></html>", None)) 
     self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "Tab 1", None)) 
     self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "Tab 2", None)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Dialog = QtGui.QDialog() 
    ui = Ui_Dialog() 
    ui.setupUi(Dialog) 
    Dialog.show() 
    sys.exit(app.exec_()) 

我的猜测是,我将不得不进口的其他文件和呼叫一些方法使其显示。有没有办法这样做:

secondWindow = Ui_Dialog 
secondWindow.show() 

或沿着这些线?我试过类似的东西,但它说没有方法show()。那是因为班级的构造方式吗?

我甚至试过这样的事情:

def nom(): 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    Dialog = QtGui.QDialog() 
    ui = Ui_Dialog() 
    ui.setupUi(Dialog) 
    Dialog.show() 
    sys.exit(app.exec_()) 

我的想法是,如果if __name__=="main":下的代码被启动时执行的,为什么我不能只是把那另外一个函数。

回答

1

一个简单的工作示例是这样的:

import sys 
from PyQt4 import QtGui 
from mainwindow import Ui_MainWindow 
from dialog import Ui_Dialog 

class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     self.setupUi(self) 
     self.pushButton.clicked.connect(self.show_dialog) 
    def show_dialog(self): 
     dialog = Dialog() 
     ret = dialog.exec_() 
     if ret == QtGui.QDialog.Accepted: 
      self.textEdit.append('accepted') 
     else: 
      self.textEdit.append('rejected') 

class Dialog(QtGui.QDialog, Ui_Dialog): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     self.setupUi(self) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    mw = MainWindow() 
    mw.show() 
    sys.exit(app.exec_()) 

,如果你命名你的第一个文件mainwindow.py第二个文件dialog.py工作。 第一类从Ui_MainWindow继承,另一个从Ui_Dialog继承,因此它们从导入的文件中获取代码。然后他们呼叫setupUi(self)它“生成”窗口。

if __name__ ...事件的底部,它实例化两个类,然后show()将工作并显示窗口。

如果您使用pyuic生成代码,然后更改代码,那么如果修改.ui-文件并重新生成python代码,它将被简单地覆盖!因此,您应该始终创建一个“主”文件并将GUI导入其中。

如果你从你的第一个文件删除from hi import Ui_Dialogdef open(self):

自己的函数代码只会工作的open(这应该得到因为内建open的另一个名字)应该进入主文件!

编辑:更改了代码,以便在点击“PhusButton”时显示对话框。
要“开始”一个对话框,您需要使用其方法exec_。在上面的代码中,clicked按钮的信号连接到show_dialog方法。这个方法在每次点击按钮后被调用。然后它执行对话框,并在对话框关闭时写入文本框ok取消

+0

我真正想要做的是能够从mainwindow调用对话框的qt-py文件。我会怎么做呢? 感谢您的这个小片段! [我这样试过:](http://pastie.org/7984613) – Zeratas

+0

好吧,我已经更改了代码,所以它会在每次点击按钮时打开对话框。 – TobiMarg

+0

Whooohooo。我得到你所做的和我搞砸的地方谢谢! – Zeratas

相关问题