使用qt向选项卡添加绘图

时间:2012-07-30 13:12:29

标签: python qt

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

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()

1 个答案:

答案 0 :(得分:1)

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

  1. 创建QTabWidget
  2. 为选项卡对话框中的每个页面创建一个QWidget,但不要为它们指定父窗口小部件。
  3. 将子窗口小部件插入到页面窗口小部件中,使用布局将它们正常放置。
  4. 调用addTab()insertTab()将页面小部件放入标签窗口小部件,为每个标签提供一个带有可选键盘快捷键的合适标签。
  5. http://qt-project.org/doc/qt-5.0/qtabwidget.html#details

    更新:

    我在Qt Designer中创建了一个文件untitled.ui,只有一个复选框。我还在__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()
    

    它有效。