当前位置: 首页 > 知识库问答 >
问题:

PyQt中VTK与按钮的集成

刘选
2023-03-14
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(743, 430)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout.addWidget(self.frame)
        MainWindow.setCentralWidget(self.centralwidget)


        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))

下面是init.py代码

import vtk
import sys
from PyQt5 import QtCore, QtGui
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog, QFileDialog
from foo import Ui_MainWindow
from PyQt5 import Qt

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.OpenVTK)

    def OpenVTK(self):

        self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
        self.vl = Qt.QVBoxLayout() #I think the mistake might be here..
        self.vl.addWidget(self.vtkWidget)

        self.ren = vtk.vtkRenderer()
        self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)
        self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()

        # Create source
        source = vtk.vtkSphereSource()
        source.SetCenter(0, 0, 0)
        source.SetRadius(5.0)

        # Create a mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(source.GetOutputPort())

        # Create an actor
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)

        self.ren.AddActor(actor)

        self.ren.ResetCamera()

        self.frame.setLayout(self.vl)
        self.setCentralWidget(self.frame)

        self.show()
        self.iren.Initialize()
        self.iren.Start()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

如果有人能帮助我,我将不胜感激。提前感谢!

共有1个答案

太叔富
2023-03-14

您可以为框架按钮指定伸展因子,以便它们按比例调整大小。此外,在OpenVTK()中,不要将垂直布局作为中心小部件,因为它会隐藏按钮。

foo.py中的setupui()添加以下行:

# Set the stretch factors for both the pushButton & the frame
self.horizontalLayout.setStretchFactor(self.frame,1)
self.horizontalLayout.setStretchFactor(self.pushButton,1)

init.py中的openvtk()注释掉或删除以下行:

#self.setCentralWidget(self.frame)
 类似资料:
  • 本文向大家介绍按钮功能和自定义事件– PyQt,包括了按钮功能和自定义事件– PyQt的使用技巧和注意事项,需要的朋友参考一下 首先,让我们创建一个主代码;然后,我们将对其进行修改。我在这里为您提供主代码。并且,所做的修改将带有其说明。让我们做一些编码: 源代码: 输出结果 此输出布局是使用主窗口小部件生成的。QtGui.QMainWindow。self.setWindowIcon(QtGui.Q

  • 主要内容:本节引言:,1.StateListDrawable简介:,2.实现按钮的按下效果:,3.使用颜色值绘制圆角按钮,4.实现Material Design水波效果的Button,本节小结:本节引言: 今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解,另外Button是TextView的子类,

  • VTK

    Vtk(visualization toolkit)是一个开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,650多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。 Vtk几乎可以在任何一个基于Unix的平台上操作,以及Wi

  • 我正在编写一个小型PyQt4应用程序,它只是一个“是/否”对话框,必须执行一个外部命令(例如“eject/dev/sr0”)并退出。 应用程序运行时,它在按下“是”按钮后执行命令,但我无法在执行命令时使对话框本身退出。 这是我的密码。当我单击“是”时,它会正确地调用'eject/dev/sr0'命令,但在此之后对话框仍然可见。我必须单击“否”关闭应用程序,我希望它在执行命令时自动关闭。我应该添加/

  • 我有一个2x2的按钮网格。现在我想把按钮缩小到200x200,把每个按钮放在一个容器中作为一个空格,然后把每个按钮放在各自容器的中心。 在我的图片中,我只缩小了顶部的两个按钮,以便您可以看到页面上的间距。我怎样才能从第一张图片转到第二张图片,这是Photoshop制作的? 文件:app.js 文件:index.html

  • 问题内容: 嗨,我有一个带有三个按钮的自定义UITableViewCell,用于处理购物车功能,加号,减号和删除按钮,我需要知道已触摸哪个单元格。 我已经尝试使用“标签解决方案”,但是由于单元的生命周期,它无法正常工作。 谁能帮我找到解决方案? 提前致谢 问题答案: 我正在使用UITableViewCell的子类中的单元委托方法解决此问题。 快速概述: 1) 创建一个协议 2) 子类化 您的 子类