2

我在 qt 中有一个 python gui。gui是使用设计师的。它包含选项卡。我想添加一个情节。我的绘图对象是一个继承自 QtCore.QObject 的类(称为 MyPlot)。要将它添加到 gui,我可以简单地在继承自 QtGui.QMainWindow 的类 MainWindow 中执行操作:

self.Myplot(self)
self.MyPlot.plot()

但我不知道如何告诉 python 只将绘图放在一个选项卡中。我想我必须在 MainWindow 内做类似的事情:

self.tab(0).Myplot(self)

但我找不到具体是什么。有人有任何线索吗?

谢谢!

编辑:尝试在以下代码中读取由设计器生成的 ui 文件的选项卡失败(我只是试图将我用设计器构建的东西放入选项卡,而不是添加绘图):

import sys
from PyQt4 import QtCore, QtGui, uic


class MyWidget(QtGui.QWidget):
  def __init__(self, parent = None):
    uic.loadUi('mainwindow.ui', self)


class TabWidget(QtGui.QTabWidget):  
  def __init__(self, parent=None):  
    super (TabWidget, self).__init__(parent)  
    self.setTabsClosable(True)  
    self.tabCloseRequested.connect(self.removeTab)
    self.inside = MyWidget()

  def tabInserted(self, index):  
    self.tabBar().setVisible(self.count() > 1)  

  def tabRemoved(self, index):  
    self.tabBar().setVisible(self.count() > 1) 


class MainWindow(QtGui.QMainWindow):
  def __init__(self,parent=None):
    QtGui.QMainWindow.__init__(self, parent)


def main():
  qApp = QtGui.QApplication(sys.argv)  

  tab = TabWidget()  

  button = QtGui.QPushButton('Hello')  
  @button.clicked.connect  
  def clicked():  
    tab.addTab(QtGui.QLabel('Hello'), 'Hello')  

  tab.addTab(button, 'Button')  

  layout = QtGui.QHBoxLayout()  
  layout.addWidget(tab)  

  window = QtGui.QWidget()  
  window.setLayout(layout)  
  window.resize(600, 400)  
  window.show()  

  qApp.exec_()  

if __name__ == "__main__":
  main()
4

1 回答 1

3

正常的使用方法QTabWidget是执行以下操作:

  1. 创建一个QTabWidget.
  2. 为选项卡对话框中的每个页面创建一个QWidget,但不要为它们指定父窗口小部件。
  3. 将子小部件插入页面小部件,使用布局将它们正常定位。
  4. 调用addTab()insertTab()将页面小部件放入选项卡小部件中,为每个选项卡提供一个合适的标签,并带有可选的键盘快捷键。

http://qt-project.org/doc/qt-5.0/qtabwidget.html#details

更新:

untitled.ui我在 Qt Designer 中用一个复选框创建了一个文件。我还在以下位置添加了对父级__init__的调用MyWidget

import sys
from PyQt4 import QtCore, QtGui, uic


class MyWidget(QtGui.QWidget):
  def __init__(self, parent = None):
    QtGui.QWidget.__init__(self)
    uic.loadUi('untitled.ui', self)


class TabWidget(QtGui.QTabWidget):  
  def __init__(self, parent=None):  
    super (TabWidget, self).__init__(parent)  
    self.setTabsClosable(True)  
    self.tabCloseRequested.connect(self.removeTab)
    self.inside = MyWidget()

  def tabInserted(self, index):  
    self.tabBar().setVisible(self.count() > 1)  

  def tabRemoved(self, index):  
    self.tabBar().setVisible(self.count() > 1) 


class MainWindow(QtGui.QMainWindow):
  def __init__(self,parent=None):
    QtGui.QMainWindow.__init__(self, parent)


def main():
  qApp = QtGui.QApplication(sys.argv)  

  tab = TabWidget()  

  button = QtGui.QPushButton('Hello')  
  @button.clicked.connect  
  def clicked():  
    tab.addTab(QtGui.QLabel('Hello'), 'Hello')  

  tab.addTab(button, 'Button')  

  layout = QtGui.QHBoxLayout()  
  layout.addWidget(tab)  

  window = QtGui.QWidget()  
  window.setLayout(layout)  
  window.resize(600, 400)  
  window.show()  

  qApp.exec_()  

if __name__ == "__main__":
  main()

它有效。

于 2012-07-30T13:29:06.700 回答