直接从 UI-File 加载 QDialog?
Load QDialog directly from UI-File?
我使用 QT Designer 并用它创建我的 GUIs。要启动主程序,我使用以下代码:
import sys
from PyQt4 import uic, QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *
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)
def main():
app = QtGui.QApplication(sys.argv)
myWindow = MyWindowClass()
myWindow.show()
app.exec_()
main_dialog = uic.loadUiType("GUI.ui")[0]
class MyWindowClass(QtGui.QMainWindow, main_dialog):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
if __name__ == "__main__":
main()
所以用这一行 main_dialog = uic.loadUiType("GUI.ui")[0]
我定义了我创建的 UI-File.
现在,当我使用 QDialogs 时,我只是通过首先创建它们,然后将它们转换为 Python 代码(使用 PYUIC4),然后实现来完成 运行 它们我的主 python 文件和 运行 QDialog 中的代码是这样的:
def NameOfDialog(self):
dialog = Qdialog()
dialog.ui = NameOfDialogClass()
dialog.ui.setupUi(dialog)
dialog.exec_()
明显的问题是,每当我对 GUI 进行任何微小的更改时,我都必须再次完成整个过程(转换并将代码放入主代码中,注意不要删除任何我添加并需要维护的其他行)。
我确定有一个解决方案也可以直接引用 QDialog 的 UI 文件,但是如何呢?我尝试了与主要 window 相同的方法,但没有成功:(
谢谢!
编辑:
这是我在最小示例中尝试过的方法,但它不起作用。我错过了什么?
#-*- encoding: UTF-8 -*-
import sys
from PyQt4 import uic, QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *
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)
def main():
app = QtGui.QApplication(sys.argv)
myWindow = MyWindowClass()
myWindow.show()
app.exec_()
main_dialog = uic.loadUiType("GUI.ui")[0]
TestQDialog = uic.loadUiType("Dialog.ui")[0]
class QDialogClass(object, TestQDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
class MyWindowClass(QtGui.QMainWindow, main_dialog):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.btn_close.clicked.connect(self.dialog)
def dialog(self):
dialog = Qdialog()
dialog.ui = QDialogClass()
dialog.ui.setupUi(dialog)
dialog.exec_()
if __name__ == "__main__":
main()
您的对话框 class 的定义方式应与您的主要 window class 完全相同。我显然不能自己测试,但脚本应该是这样的:
import sys
from PyQt4 import uic, QtGui, QtCore
main_dialog = uic.loadUiType("GUI.ui")[0]
TestQDialog = uic.loadUiType("Dialog.ui")[0]
class QDialogClass(QtGui.QDialog, TestQDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
class MyWindowClass(QtGui.QMainWindow, main_dialog):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.btn_close.clicked.connect(self.dialog)
def dialog(self):
dialog = QDialogClass()
dialog.exec_()
def main():
app = QtGui.QApplication(sys.argv)
myWindow = MyWindowClass()
myWindow.show()
app.exec_()
if __name__ == "__main__":
main()
我使用 QT Designer 并用它创建我的 GUIs。要启动主程序,我使用以下代码:
import sys
from PyQt4 import uic, QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *
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)
def main():
app = QtGui.QApplication(sys.argv)
myWindow = MyWindowClass()
myWindow.show()
app.exec_()
main_dialog = uic.loadUiType("GUI.ui")[0]
class MyWindowClass(QtGui.QMainWindow, main_dialog):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
if __name__ == "__main__":
main()
所以用这一行 main_dialog = uic.loadUiType("GUI.ui")[0]
我定义了我创建的 UI-File.
现在,当我使用 QDialogs 时,我只是通过首先创建它们,然后将它们转换为 Python 代码(使用 PYUIC4),然后实现来完成 运行 它们我的主 python 文件和 运行 QDialog 中的代码是这样的:
def NameOfDialog(self):
dialog = Qdialog()
dialog.ui = NameOfDialogClass()
dialog.ui.setupUi(dialog)
dialog.exec_()
明显的问题是,每当我对 GUI 进行任何微小的更改时,我都必须再次完成整个过程(转换并将代码放入主代码中,注意不要删除任何我添加并需要维护的其他行)。
我确定有一个解决方案也可以直接引用 QDialog 的 UI 文件,但是如何呢?我尝试了与主要 window 相同的方法,但没有成功:(
谢谢!
编辑:
这是我在最小示例中尝试过的方法,但它不起作用。我错过了什么?
#-*- encoding: UTF-8 -*-
import sys
from PyQt4 import uic, QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *
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)
def main():
app = QtGui.QApplication(sys.argv)
myWindow = MyWindowClass()
myWindow.show()
app.exec_()
main_dialog = uic.loadUiType("GUI.ui")[0]
TestQDialog = uic.loadUiType("Dialog.ui")[0]
class QDialogClass(object, TestQDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
class MyWindowClass(QtGui.QMainWindow, main_dialog):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.btn_close.clicked.connect(self.dialog)
def dialog(self):
dialog = Qdialog()
dialog.ui = QDialogClass()
dialog.ui.setupUi(dialog)
dialog.exec_()
if __name__ == "__main__":
main()
您的对话框 class 的定义方式应与您的主要 window class 完全相同。我显然不能自己测试,但脚本应该是这样的:
import sys
from PyQt4 import uic, QtGui, QtCore
main_dialog = uic.loadUiType("GUI.ui")[0]
TestQDialog = uic.loadUiType("Dialog.ui")[0]
class QDialogClass(QtGui.QDialog, TestQDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
class MyWindowClass(QtGui.QMainWindow, main_dialog):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.btn_close.clicked.connect(self.dialog)
def dialog(self):
dialog = QDialogClass()
dialog.exec_()
def main():
app = QtGui.QApplication(sys.argv)
myWindow = MyWindowClass()
myWindow.show()
app.exec_()
if __name__ == "__main__":
main()