在 Qt4 和 python 制作的 QMainWindow 中打开 QWidget 的最佳方法是什么?
What is the best way to open a QWidget inside a QMainWindow made in Qt4 and python?
我希望能够在 QMainWindow
中创建(或打开,我不知道正确的表达方式)QWidget
。我的主要 window 仅包含状态栏和上部工具栏。例如,我想打开设置 window,我不希望它显示在不同的 window 我希望它显示在我的主 window.
中
我正在寻找一些示例,但我无法在我的案例中实施它。我的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_())
您是否在考虑像停靠小部件这样的东西?
http://doc.qt.io/qt-4.8/qdockwidget.html#details
QDockWidget provides the concept of dock widgets, also know as tool palettes or utility windows. Dock windows are secondary windows placed in the dock widget area around the central widget in a QMainWindow.
尝试setCentralWidget
在 QMainWindow 中添加 QWidget,
如果您想在 QMainWindow 内的不同小部件之间切换,您可以使用 QStackedWidget 作为中央小部件,将您的小部件(如设置)添加到 stackedWidget 并添加一些按钮以在小部件之间切换。
我希望能够在 QMainWindow
中创建(或打开,我不知道正确的表达方式)QWidget
。我的主要 window 仅包含状态栏和上部工具栏。例如,我想打开设置 window,我不希望它显示在不同的 window 我希望它显示在我的主 window.
我正在寻找一些示例,但我无法在我的案例中实施它。我的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_())
您是否在考虑像停靠小部件这样的东西? http://doc.qt.io/qt-4.8/qdockwidget.html#details
QDockWidget provides the concept of dock widgets, also know as tool palettes or utility windows. Dock windows are secondary windows placed in the dock widget area around the central widget in a QMainWindow.
尝试setCentralWidget 在 QMainWindow 中添加 QWidget,
如果您想在 QMainWindow 内的不同小部件之间切换,您可以使用 QStackedWidget 作为中央小部件,将您的小部件(如设置)添加到 stackedWidget 并添加一些按钮以在小部件之间切换。