Измените значение в OpenGLWidget из MainWindow (графический интерфейс)
Вопрос
Используя python и привязки (pyqt, pyopengl) Я создал простой 3D-просмотрщик.Я хотел бы создать некоторые основные действия, управляемые / запускаемые взаимодействием с пользователем.Программа состоит из 2 частей.
виджет 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.
Решение
Внутри OpenGLWidget
класс добавляет следующий метод:
def setColor(R, G, B):
self.R = R
self.G = G
self.B = B
Внутри MainWindow
в Blue()
замените существующий код следующим:
self.OpenGLWidget.setColor(0,0,1)
self.openGLWidget.draw() # or do whatever you want, variables are changed in `OpenGLWidget`
Чтобы установить зеленый цвет, вызовите setColor()
с 0,1,0
параметры.
Не связан с StackOverflow