2014-01-09 46 views
0

使用python和绑定(pyqt,pyopengl)我创建了一个简单的3D查看器。我想创建一些基于用户交互操作/触发的基本操作。该计划有2个部分。从MainWindow(GUI)更改OpenGLWidget的值

OpenGL的控件:

class OpenGLWidget(QtOpenGL.QGLWidget): 
    def __init__(self, parent=None): 
     self.parent = parent 

     QtOpenGL.QGLWidget.__init__(self, parent) 
     ... 
    def draw(self): 
     #here I would like to change colour of background from right mouse click menu 
     glClearColor(self.R,self.G,self.B,1) 

主要部件:

class MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 

     self.resize(initial_window_width, initial_window_height) 
     self.setWindowTitle('Window Name') 

     self.setMouseTracking(True) 

     # location of window on screen 
     self.setGeometry(5, 25, initial_window_width, initial_window_height) 

     self.createActions() 
     self.createMenus()   

     # sets opengl window in central widget position 
     self.OpenGLWidget = OpenGLWidget() 
     self.setCentralWidget(self.OpenGLWidget) 

    @pyqtSlot(QtCore.QPoint) 
    def contextMenuRequested(self,point): 
     menu = QtGui.QMenu() 
     action1 = menu.addAction("Blue") 
     self.connect(action1,SIGNAL("triggered()"), self,SLOT("Blue()"))     
     menu.exec_(self.mapToGlobal(point)) 

    @pyqtSlot() 
    def Blue(self): 
     self.R = 0 
     self.G = 0 
     self.B = 1 

运行整个程序代码:

if __name__=='__main__': 
    app = QtGui.QApplication(sys.argv) 
    win = MainWindow() 
    win.setContextMenuPolicy(QtCore.Qt.CustomContextMenu); 
    win.connect(win, SIGNAL("customContextMenuRequested(QPoint)"), 
       win, SLOT("contextMenuRequested(QPoint)")) 
    win.show() 
    sys.exit(app.exec_()) 

我想知道如何更改值R, G,B 主要部件表示背景色将变为蓝色opengl部件

+1

你可以请你展示一段代码,你在哪里创建了“OpenGLWidget”的对象并使用它?你是否在'MainWindow'中使用它? – qurban

+0

@qurban我在主窗口小部件类** MainWindow **的问题中添加了所需的代码。 – avstenit

回答

1

里面OpenGLWidget类中添加下面的方法:

def setColor(R, G, B): 
    self.R = R 
    self.G = G 
    self.B = B 

里面MainWindowBlue()替换为下面一个现有代码:

self.OpenGLWidget.setColor(0,0,1) 
self.openGLWidget.draw() # or do whatever you want, variables are changed in `OpenGLWidget` 

设置颜色为绿色,调用setColor()0,1,0参数。