QTabWidget和开关盒

问题描述 投票:2回答:1

当我按一下按钮时,根据所选的选项卡,我需要不同的定义。我试图这样做,但是没有用。当前使用任何标签时,都会打印“ kek”。

from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import *
import sys

app = QApplication(sys.argv)
ui = uic.loadUi("example.ui")

def lol():
    print ('lol')

def kek():
    print ('kek')

case = {
    0 : lol,
    1 : kek
}


ui.pushButton.clicked.connect(case.get(ui.tabWidget.currentIndex()))


ui.show()
app.exec()

这是使用过的用户界面:

enter image description here

<?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="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>330</x>
      <y>490</y>
      <width>93</width>
      <height>28</height>
     </rect>
    </property>
    <property name="text">
     <string>PushButton</string>
    </property>
   </widget>
   <widget class="QTabWidget" name="tabWidget">
    <property name="geometry">
     <rect>
      <x>110</x>
      <y>60</y>
      <width>591</width>
      <height>381</height>
     </rect>
    </property>
    <property name="currentIndex">
     <number>1</number>
    </property>
    <widget class="QWidget" name="tab">
     <attribute name="title">
      <string>Tab 1</string>
     </attribute>
    </widget>
    <widget class="QWidget" name="tab_2">
     <attribute name="title">
      <string>Tab 2</string>
     </attribute>
    </widget>
   </widget>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
python pyqt pyqt5
1个回答
1
投票

问题是case.get(ui.tabWidget.currentIndex())是在连接时而不是在单击时求值的,因此您具有初始currentIndex。

可能的解决方案是使用lambda方法:

ui.pushButton.clicked.connect(
    lambda: case.get(ui.tabWidget.currentIndex(), lambda: None)()
)

或创建一个中间函数:

def on_clicked():
    case.get(ui.tabWidget.currentIndex(), lambda: None)()

ui.pushButton.clicked.connect(on_clicked)
© www.soinside.com 2019 - 2024. All rights reserved.