在Qt4和python中创建的QMainWindow中打开QWidget的最佳方法是什么?

时间:2017-07-27 16:20:52

标签: python qt pyqt pyqt4

我希望能够在QWidget内创建(或打开,我不知道说出来的正确方法)QMainWindow。我的主窗口仅包含状态栏和上方工具栏。例如,我想打开设置窗口,我不希望它显示在我希望它显示在我的主窗口内的不同窗口。

我正在寻找一些例子但我无法在我的案例中实施它。我的gui是由QDesigner制作的文件。

这是我的示例代码:

import sys,os,time,logging
from PyQt4 import QtGui, uic ,QtSql,QtCore
from PyQt4.QtCore import QThread, SIGNAL
from PyQt4.QtGui import *
sys.stderr = open("errlog.txt", "w")

class dialog1(QtGui.QWidget):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        file_path = os.path.abspath("ui/dialog1.ui")
        uic.loadUi(file_path, self)


class MyWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        # super(MyWindow, self).__init__()
        file_path = os.path.abspath("ui/main.ui")
        uic.loadUi(file_path, self)
        self.actionAbout.triggered.connect(self.run_dialog1)

    def run_dialog1(self):
        dialog = dialog1(parent=MyWindow)
        dialog.show()



if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

如果你可以帮我解决这个问题,我会很感激,所以我能理解它是如何运作的。谢谢

更新并解决:

对于帮助人员,我解决了这个问题。我会提供更新。

import sys,os,time,logging
from PyQt4 import QtGui, uic ,QtSql,QtCore
from PyQt4.QtCore import QThread, SIGNAL
from PyQt4.QtGui import *
import mysql.connector as mariadb
import base64
from uuid import getnode as get_mac
from platform import system as system_name # Returns the system/OS name
from os import system as system_call       # Execute a shell command
import subprocess
sys.stderr = open("errlog.txt", "w")

class settings(QtGui.QTabWidget):
    def __init__(self,parent):
        QtGui.QTabWidget.__init__(self,parent)
        file_path = os.path.abspath("ui/settings.ui")
        uic.loadUi(file_path, self)

class MyWindow(QtGui.QMainWindow):
    def __init__(self,parent=None):
        QtGui.QMainWindow.__init__(self,parent)
        # super(MyWindow, self).__init__()
        file_path = os.path.abspath("ui/main.ui")
        uic.loadUi(file_path, self)

    def run_settings(self):
        self.form_widget = settings(self)
        self.setCentralWidget(self.form_widget)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

2 个答案:

答案 0 :(得分:1)

你在考虑像停靠小工具这样的东西吗? http://doc.qt.io/qt-4.8/qdockwidget.html#details

  

QDockWidget提供了dock小部件的概念,也称为工具调色板或实用程序窗口。停靠窗口是放置在QMainWindow中央窗口小部件周围的停靠窗口小部件区域中的辅助窗口。

答案 1 :(得分:1)

试试setCentralWidget 在QMainWindow中添加QWidget,

如果要在QMainWindow内部切换不同的小部件,可以使用QStackedWidget作为中心小部件,将类似设置的小部件添加到stackedWidget,并添加一些按钮以在小部件之间切换。