Ejemplo n.º 1
0
class One(QObject):
    def __init__(self, parent):
        super().__init__()
        self._parent = parent
        self._board = QWidget(self._parent)
        self._board.resize(300, 300)
        self._board.setStyleSheet(
            'QWidget {background-color: rgb(60, 60, 60)}')
        self._board.setWindowFlags(Qt.WindowStaysOnTopHint
                                   | Qt.NoDropShadowWindowHint)
        # BUTTON
        self._button = QPushButton(self._parent)
        self._button.resize(30, 30)
        self._button.move(50, 50)
        self._button.setText('ok')
        self._button.setStyleSheet(
            'QPushButton {background: rgb(255, 255, 255)}')
        self._button.pressed.connect(self._pressed)
        self._button.released.connect(self._released)
        # TEST_WIDGET
        self._test_widget1 = QToolBox(self._parent)
        self._test_widget1.resize(100, 100)
        self._button.show()
        self._test_widget1.show()
        self._board.show()

    def _pressed(self):
        self._test_widget1.setStyleSheet(
            'QToolBox {background-color: rgb(255, 0, 0)}')
        self._test_widget1.setVisible(True)
        self._button.setText('Pressed')

    def _released(self):
        self._test_widget1.setVisible(False)
        self._button.setText('Released')
Ejemplo n.º 2
0
    def init_window(self):

        self.setWindowIcon(QtGui.QIcon(self.iconName))
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.setStyleSheet("background-color:orange")

        vbox = QVBoxLayout()

        toolbox = QToolBox()
        toolbox.setStyleSheet("background-color:grey")
        vbox.addWidget(toolbox)

        label = QLabel()
        toolbox.addItem(label, "Python")

        label1 = QLabel()
        toolbox.addItem(label1, "Java")

        label2 = QLabel()
        toolbox.addItem(label2, "C++")

        self.setLayout(vbox)

        self.show()
    def initUI(self):
        vbox = QVBoxLayout()

        toolbox = QToolBox()
        toolbox.setStyleSheet('background-color:green')
        toolbox.addItem(QLabel(), "Python")
        toolbox.addItem(QLabel(), "Java")
        toolbox.addItem(QLabel(), "C++")

        vbox.addWidget(toolbox)

        self.setLayout(vbox)
Ejemplo n.º 4
0
    def init_ui(self):
        vbox = QVBoxLayout()
        toolbox = QToolBox()
        toolbox.setStyleSheet("background-color:green")
        vbox.addWidget(toolbox)

        label = QLabel()
        toolbox.addItem(label, "Python")

        label = QLabel()
        toolbox.addItem(label, "Java")

        label = QLabel()
        toolbox.addItem(label, "C++")

        self.setLayout(vbox)
Ejemplo n.º 5
0
class UITlvInfo(QGroupBox):
    __codecinfo_ = None
    __sdpinfo_ = None
    __fileinfo_ = None

    def __init__(self, title: str):
        super(UITlvInfo, self).__init__(title)
        self.__initUI()

    def __initUI(self):
        vlayout = QVBoxLayout(self)
        self.__toolBox_ = QToolBox()
        vlayout.addWidget(self.__toolBox_)

        #  设置左侧导航栏 toolBox 初始化时的宽度
        self.__toolBox_.setStyleSheet("QToolBoxButton { min-width:180px}")
        # 设置左侧导航栏 toolBox 在左右拉拽时的最小宽度
        self.__toolBox_.setMinimumWidth(100)
        # 设置软件启动时默认打开导航栏的第几个 Item;这里设置的是打开第1个 Item。
        self.__toolBox_.setCurrentIndex(0)
        # self.__toolBox_.setFrameShape(QToolBox.Shape.StyledPanel) # 为toolbox增加边框
        # self.__toolBox_.set

        self.setFileInfoText(info)
        self.setTlvSdpText(sdp)
        self.setTlvCodecText('')

    def setFileInfoText(self, text: str):
        if self.__fileinfo_ is None:
            self.__fileinfo_ = QTextBrowser()
            self.__toolBox_.addItem(self.__fileinfo_, "File Info")

        self.__fileinfo_.setText(text)

    def setTlvSdpText(self, text):
        if self.__sdpinfo_ is None:
            self.__sdpinfo_ = QTextBrowser()
            self.__toolBox_.addItem(self.__sdpinfo_, 'Sdp Info')

        self.__sdpinfo_.setText(text)

    def setTlvCodecText(self, text):
        if self.__codecinfo_ is None:
            self.__codecinfo_ = QTextBrowser()
            self.__toolBox_.addItem(self.__codecinfo_, 'Codec Info')

        self.__codecinfo_.setText(text)
Ejemplo n.º 6
0
    def __init__(self):
        super(MainForm, self).__init__()

        # 主窗口初始化时实现主窗口布局
        self.setupUi(self)

        toolBox = QToolBox()

        #  设置左侧导航栏 toolBox 初始化时的宽度
        toolBox.setStyleSheet("QToolBoxButton { min-width:210px}")

        # 设置左侧导航栏 toolBox 在左右拉拽时的最小宽度
        toolBox.setMinimumWidth(100)

        toolBox.addItem(QPushButton("Tab Content 1"), "Tab &1")
        toolBox.addItem(QLabel("Tab Content 2"), "生产动态分析测试与建模")
        toolBox.addItem(QPlainTextEdit('Text 3'), QIcon('snapshot.png'), "设置")
        toolBox.setCurrentIndex(0)  # 设置软件启动时默认打开导航栏的第几个 Item;这里设置的是打开第1个 Item。
        self.verticalLayout.addWidget(toolBox)

        # #  下面两行为设置 QSplitter 分割器伸缩大小因子,但是这样设置全屏后导航栏放大了不好看
        # self.splitter.setStretchFactor(0, 30)  # 分割器左边第1个占比例30%
        # self.splitter.setStretchFactor(1, 70)  # 分割器左边第1个占比例70%

        #  下面一行为设置 QSplitter 分割器伸缩大小因子,但是这样设置全屏后导航栏放大了比较好看;不清楚原因。
        self.splitter.setStretchFactor(
            0, 0
        )  # 此函数用于设定:控件是否可伸缩。第一个参数用于指定控件的序号。第二个函数大于0时,表示控件可伸缩,小于0时,表示控件不可伸缩。
        self.splitter.setStretchFactor(
            1, 1
        )  # 此函数用于设定:控件是否可伸缩。第一个参数用于指定控件的序号。第二个函数大于0时,表示控件可伸缩,小于0时,表示控件不可伸缩。

        #  设置 QSplitter 分割器各部分最小化时的情况,设置为“False”意味着左右拉动分隔栏时各部分不会消失;此设置也可以在界面设计时在 QtDesigner 里设置。
        self.splitter.setChildrenCollapsible(False)

        #  设置 QSplitter 分割器随主窗口自适应大小变化。此设置也可以在界面设计时在 QtDesigner 里设置。
        self.splitter.setAutoFillBackground(True)

        # 主窗口初始化时实例化子窗口
        self.child = ChildrenForm()

        # 在主窗口的QSplitter里添加子窗口
        self.splitter.addWidget(self.child)
Ejemplo n.º 7
0
    def InitWindow(self):
        self.setWindowIcon(QtGui.QIcon(self.IconName))
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        #self.setStyleSheet('background-color:green')

        vbox = QVBoxLayout()
        toolbox = QToolBox()
        toolbox.setStyleSheet('background-color:green')
        self.label = QLabel()
        self.label2 = QLabel()
        self.label3 = QLabel()

        toolbox.addItem(self.label, "Python")
        toolbox.addItem(self.label2, "Java")
        toolbox.addItem(self.label3, "C++")
        vbox.addWidget(toolbox)

        self.setLayout(vbox)
        self.show()
Ejemplo n.º 8
0
class Test(QMainWindow):

    def __init__(self):
        super().__init__()
        signal.signal(signal.SIGINT, self.exit)
        self._screen_size = QApplication.primaryScreen().size()
        # WIDGET
        self._widget = QWidget(self)
        self.setCentralWidget(self._widget)
        self._widget.resize(self._screen_size)
        self._widget.event = types.MethodType(self._handle_event, self._widget)
        self._widget.setAttribute(Qt.WA_AcceptTouchEvents | Qt.WA_TranslucentBackground)
        self._widget.setWindowFlags(Qt.NoDropShadowWindowHint)
        # VTK
        self._vtk_widget = QVTKRenderWindowInteractor(self._widget)
        self._vtk_widget.resize(self._screen_size)
        self._ren_win = self._vtk_widget.GetRenderWindow()
        self._interactor = self._ren_win.GetInteractor()
        self._vtk_widget.SetInteractorStyle(InteractorStyle())
        self._sw, self._sh = self._screen_size.width(), self._screen_size.height()
        self.resize(int(self._sw * 0.7), int(self._sh * 0.7))
        self.move(int(self._sw * (1 - 0.7) / 2), int(self._sh * (1 - 0.7) / 2))
        # STYLE
        self._widget.setFocus()
        QApplication.setStyle('Fusion')
        # self.setAttribute(Qt.WA_TranslucentBackground)
        # 开启touch事件之后
        # QMainWindow不可开启此方法,会把子类所有插件变透明,且报qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch) 错误
        # TEST_DOCK
        self._dock = QWidget(self)
        self._dock.resize(70, 150)
        self._dock.move(int(self._sw * 0.7 - 80), 100)
        self._dock.setStyleSheet('QWidget {background: rgb(60, 60, 60)}')
        self._dock.show()
        # TEST_BTN
        self._button = QPushButton(self._dock)
        self._button.setText('test')
        self._button.setStyleSheet('QPushButton {background: rgb(255, 255, 255)}')
        self._button.pressed.connect(self._pressed)
        self._button.released.connect(self._released)
        self._button.resize(60, 60)
        self._button.move(5, 5)
        self._button.show()
        # TEST_PANEL
        self._bar = QWidget(self)
        self._bar.resize(340, 450)
        self._bar.move(int(self._sw * 0.7 - 425), 100)
        self._bar.show()
        self._bar.setVisible(False)
        # TEST_TOOL_BOX
        self._tool_box = QToolBox(self._bar)
        self._tool_box.resize(340, 450)
        self._tool_box.show()
        # RENDER
        self._renderer = vtk.vtkOpenGLRenderer()
        self._renderer.SetBackground((0, 0, 0))
        self._renderer.AddActor(self._axis_actor())
        self._renderer.AddActor(self._stl_actor())
        self._camera = self._renderer.GetActiveCamera()
        self._ren_win.AddRenderer(self._renderer)
        self._ren_win.Render()
        # CAMERA
        self._camera = self._renderer.GetActiveCamera()
        self._camera.SetPosition(13, 0, 0)
        self._vtk_widget.Start()
        # TIMER
        self._timer = QTimer()
        self._timer.setInterval(int(1000 / 60))
        self._timer.timeout.connect(self._render_once)
        self._timer.start()

    def _handle_event(self, widget, event):
        if event.type() in [QEvent.TouchBegin, QEvent.TouchUpdate, QEvent.TouchEnd]:
            touch_points = event.touchPoints()
            touch_point_number = len(touch_points)
            print(touch_point_number)
            if touch_point_number == 1:
                lpt = touch_points[0].lastNormalizedPos()  # 获取相对距离
                pt = touch_points[0].normalizedPos()
                dpt = pt - lpt
                self._camera.Azimuth(-dpt.x() * S_P1)  # 物体视觉上旋转与相机相反,为了逻辑符合,应取负值
                self._camera.Elevation(dpt.y() * S_P1)
                self._camera.OrthogonalizeViewUp()  # 屏蔽90度半球跳转问题
            elif touch_point_number == 2:
                if 'generic' in platform():
                    lpt0 = touch_points[0].lastNormalizedPos()
                    pt0 = touch_points[0].normalizedPos()
                    lpt1 = touch_points[1].lastNormalizedPos()
                    pt1 = touch_points[1].normalizedPos()
                    ldpt = lpt0 - lpt1
                    dpt = pt0 - pt1
                    # 缩放
                    ldis = ldpt.manhattanLength()  # 上一次两点间距
                    dis = dpt.manhattanLength()  # 本次两点间距
                    ddis = dis - ldis
                    scale = 1 + ddis if ddis > 0 else 1 / (1 - ddis)  # 根据距离差计算缩放
                    self._camera.Dolly(scale)
                    # 旋转
                    la = get_angle(ldpt)
                    a = get_angle(dpt)
                    da = a - la
                    self._camera.Roll(-degrees(da))  # 物体视觉上旋转与相机相反,为了逻辑符合,应取负值
            elif touch_point_number == 3:
                lpt = QPointF()
                pt = QPointF()
                for point in touch_points:
                    lpt += point.lastNormalizedPos()
                    pt += point.normalizedPos()
                dpt = pt - lpt
                self._camera.Yaw(dpt.x() * S_P3)
                self._camera.Pitch(dpt.y() * S_P3)
        widget.update()
        return True

    def _render_once(self):
        self._interactor.Render()

    def _pressed(self):
        self._tool_box.setStyleSheet('QToolBox {background-color: rgba(30, 30, 30, 1)}')
        self._bar.setVisible(True)
        self._button.setText('Pressed')

    def _released(self):
        self._bar.setVisible(False)
        self._button.setText('Released')


    @staticmethod
    def _axis_actor():
        actor = vtk.vtkAxesActor()
        actor.SetTotalLength(2, 2, 2)
        actor.SetShaftType(0)
        actor.SetCylinderRadius(0.01)
        actor.GetXAxisCaptionActor2D().SetWidth(0.01)
        actor.GetYAxisCaptionActor2D().SetWidth(0.01)
        actor.GetZAxisCaptionActor2D().SetWidth(0.01)
        return actor

    def _stl_actor(self):
        actor = vtk.vtkActor()
        mapper = vtk.vtkPolyDataMapper()
        actor.SetMapper(mapper)
        stl = vtk.vtkSTLReader()
        if 'generic' in platform():
            stl.SetFileName('/home/xyz/Desktop/QtTouchEvent_2020101006PM/VTK/Board.stl')
        else:
            stl.SetFileName('VTK/Board.stl')
        mapper.SetInputConnection(stl.GetOutputPort())
        stl.Update()
        return actor

    def exit(self, signum=None, frame=None):
        self._ren_win.GetInteractor().DestroyTimer()
        self._timer.stop()
        self.close()
Ejemplo n.º 9
0
class Test(QMainWindow):
    def __init__(self):
        super().__init__()
        signal.signal(signal.SIGINT, self.exit)
        # WIDGET
        self._widget = QWidget(self)
        self.setCentralWidget(self._widget)
        self.resize(900, 900)
        self._widget.event = types.MethodType(self._handle_event, self._widget)
        self._widget.setAttribute(Qt.WA_AcceptTouchEvents
                                  | Qt.WA_TranslucentBackground)
        self._widget.setWindowFlags(Qt.NoDropShadowWindowHint)
        # VTK
        self._vtk_widget = QVTKRenderWindowInteractor(self._widget)
        self._vtk_widget.resize(900, 900)
        self._ren_win = self._vtk_widget.GetRenderWindow()
        self._interactor = self._ren_win.GetInteractor()
        self._vtk_widget.SetInteractorStyle(InteractorStyle())
        # # TEST_WIDGET
        self._test_widget = QWidget(self)
        self._test_widget.resize(300, 300)
        self._test_widget.setStyleSheet(
            'QWidget {background: rgb(60, 60, 60)}')
        # TEST_BTN
        self._button = QPushButton(self._test_widget)
        self._button.setText('test')
        self._button.setStyleSheet(
            'QPushButton {background: rgb(255, 255, 255)}')
        self._button.pressed.connect(self._pressed)
        self._button.released.connect(self._released)
        self._button.resize(100, 30)
        self._button.move(100, 200)
        self._test_widget1 = QToolBox(self._test_widget)
        self._test_widget1.resize(100, 100)
        self._test_widget1.show()
        self._button.show()
        self._test_widget.show()

        # RENDER
        self._renderer = vtk.vtkOpenGLRenderer()
        self._renderer.SetBackground((0, 0, 0))
        self._renderer.AddActor(self._axis_actor())
        for actor in self._stl_actor().values():
            self._renderer.AddActor(actor)
        self._camera = self._renderer.GetActiveCamera()
        self._ren_win.AddRenderer(self._renderer)
        self._ren_win.Render()
        # CAMERA
        self._camera = self._renderer.GetActiveCamera()
        self._camera.SetPosition(13, 0, 0)
        self._vtk_widget.Start()
        # TIMER
        self._timer = QTimer()
        self._timer.setInterval(int(1000 / 60))
        self._timer.timeout.connect(self._render_once)
        self._timer.start()

    def _handle_event(self, widget, event):
        if event.type() in [
                QEvent.TouchBegin, QEvent.TouchUpdate, QEvent.TouchEnd
        ]:
            touch_points = event.touchPoints()
            self._touch_point_number = len(touch_points)
            print(self._touch_point_number)
            if self._touch_point_number == 1:
                lpt = touch_points[0].lastNormalizedPos()  # 获取相对距离
                pt = touch_points[0].normalizedPos()
                dpt = pt - lpt
                self._camera.Azimuth(-dpt.x() *
                                     S_P1)  # 物体视觉上旋转与相机相反,为了逻辑符合,应取负值
                self._camera.Elevation(dpt.y() * S_P1)
            elif self._touch_point_number == 2:
                lpt0 = touch_points[0].lastNormalizedPos()
                pt0 = touch_points[0].normalizedPos()
                lpt1 = touch_points[1].lastNormalizedPos()
                pt1 = touch_points[1].normalizedPos()
                ldpt = lpt0 - lpt1
                dpt = pt0 - pt1
                # 缩放
                ldis = ldpt.manhattanLength()  # 上一次两点间距
                dis = dpt.manhattanLength()  # 本次两点间距
                ddis = dis - ldis
                scale = 1 + ddis if ddis > 0 else 1 / (1 - ddis)  # 根据距离差计算缩放
                self._camera.Dolly(scale)
                # 旋转
                la = get_angle(ldpt)
                a = get_angle(dpt)
                da = a - la
                self._camera.Roll(-degrees(da))  # 物体视觉上旋转与相机相反,为了逻辑符合,应取负值
            elif self._touch_point_number == 3:
                lpt = QPointF()
                pt = QPointF()
                for point in touch_points:
                    lpt += point.lastNormalizedPos()
                    pt += point.normalizedPos()
                dpt = pt - lpt
                self._camera.Yaw(dpt.x() * S_P3)
                self._camera.Pitch(dpt.y() * S_P3)
        # widget.update()
        return True

    def _render_once(self):
        self._interactor.Render()

    def _pressed(self):
        self._test_widget1.setStyleSheet(
            'QToolBox {background-color: rgb(255, 0, 0)}')
        self._test_widget1.setVisible(True)
        self._button.setText('Pressed')

    def _released(self):
        self._test_widget1.setVisible(False)
        self._button.setText('Released')

    @staticmethod
    def _axis_actor():
        actor = vtk.vtkAxesActor()
        actor.SetTotalLength(2, 2, 2)
        actor.SetShaftType(0)
        actor.SetCylinderRadius(0.01)
        actor.GetXAxisCaptionActor2D().SetWidth(0.01)
        actor.GetYAxisCaptionActor2D().SetWidth(0.01)
        actor.GetZAxisCaptionActor2D().SetWidth(0.01)
        return actor

    def _stl_actor(self):
        stls = dict()
        actors = dict()
        mappers = dict()
        for i, stl in enumerate([
                '/home/xyz/Desktop/VTK读取stl文件+touchevent融合/Board.stl',
                '/home/xyz/Desktop/VTK读取stl文件+touchevent融合/Arm.stl'
        ]):
            actors[i] = vtk.vtkActor()
            mappers[i] = vtk.vtkPolyDataMapper()
            actors[i].SetMapper(mappers[i])
            stls[i] = vtk.vtkSTLReader()
            stls[i].SetFileName(stl)
            mappers[i].SetInputConnection(stls[i].GetOutputPort())
            stls[i].Update()
        return actors

    def exit(self, signum=None, frame=None):
        self._ren_win.GetInteractor().DestroyTimer()
        self._timer.stop()
        self.close()
Ejemplo n.º 10
0
 def __init__(self,readme_text):
     '''Initialize ReadmeWindow'''
     super().__init__()
     # icon path
     self.icon_path = ':/plugins/cruisetools/icons'
     
     # set window size
     self.resize(600, 570)
     
     # set window icon
     icon = QIcon(f'{self.icon_path}/icon.png')
     self.setWindowIcon(icon)
     
     # set windows title
     self.setWindowTitle('Readme')
     
     # create layout
     layout = QGridLayout()
     
     # create title, big font, centered
     title = QLabel()
     title.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
     title_font = QFont('Default', 14, QFont.Bold)
     title.setFont(title_font)
     
     # add title to layout
     layout.addWidget(title, 0, 0)
     
     # create version text, centered under title
     version = QLabel()
     version.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
     version_font = QFont('Default', 10)
     version.setFont(version_font)
     
     # add version to layout
     layout.addWidget(version, 1, 0)
     
     # create toolbox
     toolbox = QToolBox()
     
     # toolbox styleSheet
     toolbox_style = '''
                         QToolBox::tab {
                             border: 1px solid #C4C4C3;
                             font-size: 9pt;
                         }
                         QToolBox::tab:selected {
                             background-color: RGB(200, 0, 200);
                         }
                     '''
     
     # set toolbox style
     toolbox.setStyleSheet(toolbox_style)
     
     # add toolbox to layout
     layout.addWidget(toolbox, 2, 0)
     
     # splot readme text in text blocks
     blocks = readme_text.split('\n## ')
     
     # handle title and version block
     for line in blocks[0].splitlines():
         line = line.strip()
         if line.startswith('# '):
             title_text = line.replace("# ","")
         elif line.startswith('*v'):
             version_text = line.replace("*","")
     
     # set version and title text
     title.setText(title_text)
     version.setText(version_text)
     
     # create toolbox content from text blocks
     idx = 0
     for block in blocks[1:]:
         # get block title and content
         block_title,md = block.split('\n',1)
         
         # convert markdown to html (cheap way) << setMarkdown in PyQt 5.15
         html = self.markdown(md)
         
         # create text field
         text = QTextEdit()
         
         # mak text field read only
         text.setReadOnly(True)
         
         # add content
         text.setHtml(html)
         
         # add text to toolbox
         toolbox.addItem(text, block_title)
         
         # get block icon
         icon = self.get_icon(block_title)
         
         # set block icon
         toolbox.setItemIcon(idx,icon)
         
         idx = idx + 1
     
     # set window layout
     self.setLayout(layout)