RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1305339
Accepted
Владимир
Владимир
Asked:2022-07-15 04:39:37 +0000 UTC2022-07-15 04:39:37 +0000 UTC 2022-07-15 04:39:37 +0000 UTC

如何将函数绑定到 QTabWidget PyQt5 选项卡?

  • 772

此代码包含2选项卡:Tab1和Tab2,以及2函数:fun1()和fun2()。

需要添加什么,这样当你点击的时候Tab1,函数就被执行了fun1(),当你点击的时候Tab2- fun2()?

主文件

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
import sys


class New(QMainWindow):
    def __init__(self):
        super(New, self).__init__()
        loadUi("tabs1_2.ui", self)
        self.tabWidget.currentChanged.connect(self.tabChanged)


    @pyqtSlot()
    def tabChanged(self):
        print('Позиция индекса текущей вкладки:', self.tabWidget.currentIndex())
        print('Указатель на страницу:', self.tabWidget.currentWidget())

    def fun1(self):
        print('Сработала функция 1')

    def fun2(self):
        print('Сработала функция 2')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = New()
    window.showFullScreen()
    window.tabChanged()
    sys.exit(app.exec_())

tabs1_2.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <property name="maximumSize">
   <size>
    <width>800</width>
    <height>600</height>
   </size>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <property name="styleSheet">
   <string notr="true"/>
  </property>
  <widget class="QWidget" name="centralwidget">
   <property name="minimumSize">
    <size>
     <width>800</width>
     <height>600</height>
    </size>
   </property>
   <property name="maximumSize">
    <size>
     <width>800</width>
     <height>600</height>
    </size>
   </property>
   <widget class="QGroupBox" name="groupBox">
    <property name="geometry">
     <rect>
      <x>30</x>
      <y>10</y>
      <width>730</width>
      <height>570</height>
     </rect>
    </property>
    <property name="title">
     <string>GroupBox</string>
    </property>
    <layout class="QGridLayout" name="gridLayout">
     <item row="0" column="0">
      <widget class="QTabWidget" name="tabWidget">
       <property name="maximumSize">
        <size>
         <width>800</width>
         <height>600</height>
        </size>
       </property>
       <property name="styleSheet">
        <string notr="true">background-color: rgb(255, 255, 255);</string>
       </property>
       <property name="currentIndex">
        <number>0</number>
       </property>
       <widget class="QWidget" name="tab">
        <property name="minimumSize">
         <size>
          <width>700</width>
          <height>500</height>
         </size>
        </property>
        <property name="maximumSize">
         <size>
          <width>700</width>
          <height>500</height>
         </size>
        </property>
        <attribute name="title">
         <string>Tab 1</string>
        </attribute>
       </widget>
       <widget class="QWidget" name="tab_2">
        <property name="maximumSize">
         <size>
          <width>700</width>
          <height>500</height>
         </size>
        </property>
        <attribute name="title">
         <string>Tab 2</string>
        </attribute>
        <widget class="QWidget" name="widget_2" native="true">
         <property name="geometry">
          <rect>
           <x>11</x>
           <y>11</y>
           <width>104</width>
           <height>16</height>
          </rect>
         </property>
        </widget>
       </widget>
      </widget>
     </item>
    </layout>
   </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
python
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    S. Nick
    2022-07-15T15:08:40Z2022-07-15T15:08:40Z

    void QTabWidget:: currentChanged (int index )

    每当当前页面的索引发生变化时,都会发出此信号。参数为当前页面的新索引位置,或-1。

    注意:currentIndex 属性的通知信号。

    主文件

    import sys
    from PyQt5.QtCore import pyqtSlot
    from PyQt5.QtWidgets import QApplication, QMainWindow
    from PyQt5.uic import loadUi
    
    
    class New(QMainWindow):
        def __init__(self):
            super(New, self).__init__()
            
            loadUi("tabs1_2.ui", self)
            
            self.tabWidget.currentChanged.connect(self.tabChanged)
            self.tabWidget.setCurrentIndex(0)                       # +
            self.tabChanged(0)                                      # +++
    
        @pyqtSlot(int)                                              # +++ int
        def tabChanged(self, index):                                # +++ index
            print('Позиция индекса текущей вкладки:', self.tabWidget.currentIndex())
            print('Указатель на страницу:', self.tabWidget.currentWidget())
            
            if index == 0:                                          # +++
                self.fun1()                                         # ...
            elif index == 1:
                self.fun2()
    
        def fun1(self):
            print('Сработала функция 1')
    
        def fun2(self):
            print('Сработала функция 2')
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = New()
    #    window.showFullScreen()
        window.show()
        sys.exit(app.exec_())
    

    tabs1_2.ui

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>800</width>
        <height>600</height>
       </rect>
      </property>
      <property name="sizePolicy">
       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="maximumSize">
       <size>
        <width>800</width>
        <height>600</height>
       </size>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <property name="styleSheet">
       <string notr="true"/>
      </property>
      <widget class="QWidget" name="centralwidget">
       <property name="minimumSize">
        <size>
         <width>800</width>
         <height>600</height>
        </size>
       </property>
       <property name="maximumSize">
        <size>
         <width>800</width>
         <height>600</height>
        </size>
       </property>
       <widget class="QGroupBox" name="groupBox">
        <property name="geometry">
         <rect>
          <x>30</x>
          <y>10</y>
          <width>730</width>
          <height>570</height>
         </rect>
        </property>
        <property name="title">
         <string>GroupBox</string>
        </property>
        <layout class="QGridLayout" name="gridLayout">
         <item row="0" column="0">
          <widget class="QTabWidget" name="tabWidget">
           <property name="maximumSize">
            <size>
             <width>800</width>
             <height>600</height>
            </size>
           </property>
           <property name="styleSheet">
            <string notr="true">background-color: rgb(255, 255, 255);</string>
           </property>
           <property name="currentIndex">
            <number>0</number>
           </property>
           <widget class="QWidget" name="tab">
            <property name="minimumSize">
             <size>
              <width>700</width>
              <height>500</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>700</width>
              <height>500</height>
             </size>
            </property>
            <attribute name="title">
             <string>Tab 1</string>
            </attribute>
           </widget>
           <widget class="QWidget" name="tab_2">
            <property name="maximumSize">
             <size>
              <width>700</width>
              <height>500</height>
             </size>
            </property>
            <attribute name="title">
             <string>Tab 2</string>
            </attribute>
            <widget class="QWidget" name="widget_2" native="true">
             <property name="geometry">
              <rect>
               <x>11</x>
               <y>11</y>
               <width>104</width>
               <height>16</height>
              </rect>
             </property>
            </widget>
           </widget>
          </widget>
         </item>
        </layout>
       </widget>
      </widget>
      <widget class="QStatusBar" name="statusbar"/>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    在此处输入图像描述

    • 3
  2. Konstantin
    2022-07-15T10:26:03Z2022-07-15T10:26:03Z
    from PySide2.QtWidgets import *
    import sys
    
    class Window(QWidget):
        def __init__(self):
            QWidget.__init__(self)
            layout = QGridLayout()
            self.setLayout(layout)
            label1 = QLabel("Индекс вкладки 0.")
            label2 = QLabel("Индекс вкладки 1.")
            tabwidget = QTabWidget()
            tabwidget.blockSignals(True)
            tabwidget.currentChanged.connect(self.onChange)
            tabwidget.addTab(label1, "Tab 0")
            tabwidget.addTab(label2, "Tab 1")
            layout.addWidget(tabwidget, 0, 0)
            tabwidget.blockSignals(False)
    
        def onChange(self,i):
            print(f"Индекс вкладки {i}")
            if i == 0:
                print("То что должно быть в функции 1")
            else:
                print("То что должно быть в функции 2")
    
    app = QApplication(sys.argv)
    screen = Window()
    screen.show()
    app.exec_()
    
    • 2

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5