Python 在GUI中堆叠两个小部件

Python 在GUI中堆叠两个小部件,python,pyqt5,glumpy,Python,Pyqt5,Glumpy,从中,我得到了将许多小部件添加到PyQt5 GUI的代码: 我想在此配置中添加另一个小部件: 我试着使用QGridLayout(),以获得问题的简化版本(MWE如下) 我所尝试的(见下文)。我得到了这样的结果(图都被压扁在一边): 改变网格坐标没有任何效果 MWE: OP提供的代码中的错误有: 从未在小部件中设置布局(QGridLayout)。Qt布局不是可视元素,而是小部件几何结构的管理器 如果使用QMainWindow,则必须设置centralWidget 导入系统 将pyqt

从中,我得到了将许多小部件添加到PyQt5 GUI的代码:

我想在此配置中添加另一个小部件:

我试着使用
QGridLayout()
,以获得问题的简化版本(MWE如下)

我所尝试的(见下文)。我得到了这样的结果(图都被压扁在一边):

改变网格坐标没有任何效果

MWE:


OP提供的代码中的错误有:

  • 从未在小部件中设置布局(QGridLayout)。Qt布局不是可视元素,而是小部件几何结构的管理器

  • 如果使用QMainWindow,则必须设置centralWidget

导入系统 将pyqtgraph作为pg导入 从pyqtgraph.Qt导入QtGui,QtCore 宽度=1000 高度=500 班级布局: def设置(自我,窗口): self.window=window self.window.resize(宽度、高度) grid=QtGui.QGridLayout() self.dialogue=QtGui.QTextEdit() grid.addWidget(self.dialogue,100,0) self.plot=pg.GraphicsLayoutWidget() grid.addWidget(self.plot,200200) central_widget=QtGui.QWidget() setCentralWidget(中心窗口小部件) central_widget.setLayout(网格) 类窗口(pg.Qt.QtGui.QMainWindow,布局): def u u初始(自,放炮=无): 超级(窗口,自我)。\uuuu初始化 self.setup(self) 如果名称=“\uuuuu main\uuuuuuuu”: app=QtGui.QApplication([]) w=窗口() w、 show() sys.exit(app.exec_())

无论如何,这个问题与最初的问题无关


可能(因为OP没有提供任何达到初始目标的尝试)错误在于,将同一个小部件添加2次会创建2个副本,但事实并非如此,当您将小部件添加到布局时,它将从以前的位置移除。解决方案是创建两个小部件。为此,最好创建一个允许以简单方式实现此逻辑的类

导入系统 将pyqtgraph作为pg导入 从pyqtgraph.Qt导入QtCore、QtGui 将numpy作为np导入 从glumpy导入应用程序,作为glumpy_应用程序、总账、gloo、数据、库 从glumpy.geometry导入基本体 从glumpy.transforms导入轨迹球 宽度=1000 高度=500 glumpy_应用程序使用(“qt5”) 顶点=“” #包括“misc/spatial filters.frag” 均匀浮动高度; 二维数据的均匀采样; 均匀的vec2数据_形; 属性向量3位置; 属性向量2 texcoord; 可变vec3 v_位置; 可变矢量2 v_texcoord; void main() { float z=高度*双三次(数据,数据_形,texcoord).r; gl_位置=; v_texcoord=texcoord; v_位置=vec3(位置xy,z); } """ 片段=”“” #包括“misc/spatial filters.frag” 统一mat4模型; 统一mat4视图; 均匀mat4正常; 二维纹理均匀; 均匀浮动高度; vec4颜色均匀; 二维数据的均匀采样; 均匀的vec2数据_形; 均匀vec3浅色[3]; 均匀vec3光_位置[3]; 可变vec3 v_位置; 可变矢量2 v_texcoord; 浮动照明(vec3 v_正常,vec3灯_位置) { //在世界坐标中计算法线 vec3 n=归一化(正常*vec4(v_正常,1.0)).xyz; //计算此碎片(像素)在世界坐标中的位置 vec3位置=vec3(视图*模型*vec4(v_位置,1)); //计算从该像素曲面到光源的矢量 vec3表面到灯光=灯光位置-位置; //计算入射角的余弦(亮度) 浮动亮度=点(n,表面到光)/ (长度(表面到光)*长度(n)); 亮度=最大值(最小值(亮度,1.0),0.0); 返回亮度; } void main() { mat4模型=; //提取数据值 浮点值=双三次(数据,数据形状,v_texcoord).r; //使用相邻值计算曲面法线 float hx0=高度*双三次曲线(数据、数据_形、v_-texcoord+vec2(+1,0)/数据_形); float hx1=高度*双三次(数据,数据_形,v_-texcoord+vec2(-1,0)/数据_形); float hy0=高度*双三次曲线(数据,数据_形,v_-texcoord+vec2(0,+1)/数据_形); float hy1=高度*双三次(数据,数据_形,v_-texcoord+vec2(0,-1)/数据_形); vec3 dx=vec3(2.0/data_-shape.x,0.0,hx0-hx1); vec3-dy=vec3(0.0,2.0/data_-shape.y,hy0-hy1); vec3 v_normal=归一化(交叉(dx,dy)); //将值映射到rgb颜色 浮点数c=0.6+0.4*纹理2d(纹理,v_texcoord).r; vec4 l1=vec4(灯光颜色[0]*灯光(v_正常,灯光位置[0]),1); vec4 l2=vec4(灯光颜色[1]*照明(v_正常,灯光位置[1]),1); vec4 l3=vec4(灯光颜色[2]*灯光(v_正常,灯光位置[2]),1); gl_FragColor=color*vec4(c,c,c,1)*(0.5+0.5*(l1+l2+l3)); } """ def func3(x,y): 返回(1-x/2+x**5+y**3)*np.exp(-(x**2)-y**2) 类查看器(QtGui.QWidget): def uuu init uuu(self,parent=None): super()。\uuuu init\uuuu(父级) self.glumpy_window=glumpy_app.window(颜色=(1,1,1,1)) lay=QtGui.QVBoxLayout(自) lay.addWidget(self.glumpy\u窗口.\u native\u窗口) n=64 self.surface=gloo.Program(顶点,片段) self.vertices,self.s_索引=基本体平面(2.0,n=n) self.surface.bind(self.vertices) I=[] 对于范围(n)中的i: 一、附加(一) 对于范围(1,n)内的i: I.append(n-1+I*n) 对于范围(n-1)内的i: I.append(n*n-1-I) 对于范围(n-1)内的i: 附加(n*(n-1)-I*n) self.b_index=np.array(I,dtype=np.uint32).view(gloo.IndexBuffer) x=np.linspace(-2.0,2.0,32).astype(np.float32) y=np.linspace(-2.0,2.0,32).aType(np.float32) 十、 Y=np.meshgrid(X,Y) Z=func3(X,Y) self.surface[“data”]=(Z-Z.min())/(Z.max()-Z.min()) 自曲面[“数据”]。插值=gl.gl
import PyQt5
from PyQt5 import QtGui, QtCore
import pyqtgraph as pg
import sys
import numpy as np

width = 1000
height = 500

class layout():
    def setup(self, window):
        self.window = window
        self.window.resize(width, height)

        grid = PyQt5.QtWidgets.QGridLayout()

        self.dialogue = QtGui.QTextEdit()

        grid.addWidget(self.dialogue , 100, 0)

        self.plot = pg.GraphicsLayoutWidget(self.window)
  
        grid.addWidget(self.plot , 200, 200)

class Window(pg.Qt.QtGui.QMainWindow, layout):

    def __init__(self, shot = None):

        super(Window, self).__init__()
        self.setup(self)
        self.show()

if __name__ == '__main__':
    app = pg.Qt.QtGui.QApplication([])
    Window()
    sys.exit(app.exec_())