Используя pyopengltk и добавьте еще одну общую функцию tkinter - PullRequest
0 голосов
/ 17 февраля 2020

В настоящее время я пытаюсь создать симуляцию opengl в tkinter, поэтому я нашел this . Пример кода, представленного там:

import time
import tkinter
from OpenGL import GL
from pyopengltk import OpenGLFrame

class AppOgl(OpenGLFrame):

    def initgl(self):
        """Initalize gl states when the frame is created"""
        GL.glViewport(0, 0, self.width, self.height)
        GL.glClearColor(0.0, 1.0, 0.0, 0.0)    
        self.start = time.time()
        self.nframes = 0

    def redraw(self):
        """Render a single frame"""
        GL.glClear(GL.GL_COLOR_BUFFER_BIT)
        tm = time.time() - self.start
        self.nframes += 1
        print("fps",self.nframes / tm, end="\r" )


if __name__ == '__main__':
    root = tkinter.Tk()
    app = AppOgl(root, width=320, height=200)
    app.pack(fill=tkinter.BOTH, expand=tkinter.YES)
    app.animate = 1
    app.after(100, app.printContext)
    app.mainloop()

Я могу запустить его нормально, но я немного запутался, потому что я обычно использую tkinter с этим форматом:

class frontpage(tk.Tk):
    def __init__(self,parent):
        tk.Tk.__init__(self,parent)
        self.parent=parent

        '''Creating'''
        #Window 1
        label1 = tk.Label(self, text = 'App title',bg='blue',fg='white')
        frame1 = tk.Frame(self)

        ''' Some code '''

        label1.pack(fill='x')
        frame1.pack()

    def func1(self):
        #some function

if __name__ == '__main__':
    frontapp = frontpage(None)
    frontapp.title('App v0.1')
    frontapp.mainloop()

Учитывая, что, в любом случае, я мог бы вставить обычный элемент tkinter, такой как рамка, кнопка и т. д. c, используя pyopengltk?

1 Ответ

0 голосов
/ 17 февраля 2020

Основываясь на решении, предложенном @stovfl, нам просто нужно вставить наш класс opengl в наш класс tkinter __init__. Тогда это становится:

from __future__ import print_function

import sys, math, time
import tkinter as tk
from OpenGL import GL, GLU
from pyopengltk import OpenGLFrame

class AppOgl(OpenGLFrame):

    def initgl(self):
        """Initalize gl states when the frame is created"""
        GL.glViewport(0, 0, self.width, self.height)
        GL.glClearColor(0.0, 1.0, 0.0, 0.0)    
        self.start = time.time()
        self.nframes = 0

    def redraw(self):
        """Render a single frame"""
        GL.glClear(GL.GL_COLOR_BUFFER_BIT)
        tm = time.time() - self.start
        self.nframes += 1
        print("fps",self.nframes / tm, end="\r" )

class frontpage(tk.Tk):
    def __init__(self,parent):
        tk.Tk.__init__(self,parent)
        self.parent=parent

        open_gl_frame = AppOgl(self, width=320, height=200)
        '''Creating'''
        #Window 1
        label1 = tk.Label(self, text = 'App title',bg='blue',fg='white')
        frame1 = tk.Frame(self)

        ''' Some code '''

        open_gl_frame.animate=1 #dont forget this, or your simulation would not animated
        open_gl_frame.pack()
        label1.pack(fill='x')
        frame1.pack()

    def func1(self):
        pass

if __name__ == '__main__':
        frontapp = frontpage(None)
        frontapp.title('App v0.1')
        frontapp.mainloop()
...