访问 Qt Designer 中添加的小部件
Access widgets added in Qt Designer
我正在使用 Qt Designer 创建 Qt GUI。在设计器中,我在 QSplitter 中放置了两个小部件(一个小部件在左侧,另一个小部件在右侧)。
现在我想分别控制每个小部件,但我的主窗口中包含所有内容的 GUI python 代码,包括小部件及其内容(标签、文本标签等)。
有没有办法单独访问小部件?这是我的代码:
在主窗口上:
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = mw_gui.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
img_widget = ImageWidget(MainWindow)
sys.exit(app.exec_())
在我想用来控制右侧小部件的 class 中:
class ImageWidget(QtGui.QWidget):
def __init__(self, parent, variables):
# self.ui = ui
# self.variables = variables
if not isinstance(parent, QtGui.QMainWindow):
raise TypeError('parent must be a QMainWindow')
super(ImageWidget, self).__init__()
self._parentWidget = parent
我想访问 self.imglabel,它在正确的小部件中,但它似乎找不到它。
您应该能够找到具有名称和类型的小部件:
imglabel = self.ui.findChild(QtGui.QLabel, "imglabel")
您应该为 main-window 创建一个子class,继承自 QMainWindow
和 Ui_MainWindow
。使用这种方法,所有添加到 Qt Designer 中的小部件都可以作为实例属性访问:
from PySide import QtGui
from mw_gui import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.imglabel.setPixmap(QtGui.QPixmap('image.png'))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())
以这种方式做事也意味着可能不需要单独的控制器 classes,因为您可以只向 MainWindow
class 添加方法。如果一切都在一个命名空间中,设计会简单得多。
我正在使用 Qt Designer 创建 Qt GUI。在设计器中,我在 QSplitter 中放置了两个小部件(一个小部件在左侧,另一个小部件在右侧)。
现在我想分别控制每个小部件,但我的主窗口中包含所有内容的 GUI python 代码,包括小部件及其内容(标签、文本标签等)。
有没有办法单独访问小部件?这是我的代码:
在主窗口上:
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = mw_gui.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
img_widget = ImageWidget(MainWindow)
sys.exit(app.exec_())
在我想用来控制右侧小部件的 class 中:
class ImageWidget(QtGui.QWidget):
def __init__(self, parent, variables):
# self.ui = ui
# self.variables = variables
if not isinstance(parent, QtGui.QMainWindow):
raise TypeError('parent must be a QMainWindow')
super(ImageWidget, self).__init__()
self._parentWidget = parent
我想访问 self.imglabel,它在正确的小部件中,但它似乎找不到它。
您应该能够找到具有名称和类型的小部件:
imglabel = self.ui.findChild(QtGui.QLabel, "imglabel")
您应该为 main-window 创建一个子class,继承自 QMainWindow
和 Ui_MainWindow
。使用这种方法,所有添加到 Qt Designer 中的小部件都可以作为实例属性访问:
from PySide import QtGui
from mw_gui import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.imglabel.setPixmap(QtGui.QPixmap('image.png'))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())
以这种方式做事也意味着可能不需要单独的控制器 classes,因为您可以只向 MainWindow
class 添加方法。如果一切都在一个命名空间中,设计会简单得多。