当我按一下按钮时,根据所选的选项卡,我需要不同的定义。我试图这样做,但是没有用。当前使用任何标签时,都会打印“ 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()
这是使用过的用户界面:
<?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>
问题是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)