我正在尝试使用另一个类的按钮来模仿选项卡按钮的行为。
这样,当我单击“订单”或“历史记录”按钮时,就会选择相应的选项卡。
ATM 代码似乎可以在正确打印时更新 currentIndex 属性(订单为 0,历史记录为 1)。
然而,这种变化似乎并没有反映在窗口中,我是否认为这是一个“更新小部件”问题?如果是这样,我该如何“刷新”它?如果不是,我是否缺少一些基本概念?
我已经尽可能地精简了代码......
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
Application = QApplication(sys.argv)
class Window(QWidget):
def __init__(self):
super().__init__()
# Layout #
Layout = QVBoxLayout()
Layout.addLayout(LayoutTabButtons())
Layout.addWidget(Tabs())
self.setLayout(Layout)
self.show()
class Tabs(QTabWidget):
def __init__(self):
super().__init__()
# Children #
self.addTab(QLabel('This Is The Orders Page'),'Orders')
self.addTab(QLabel('This Is The History Page'),'History')
# Connections #
InstanceButtonOrders = ButtonOrders(self)
InstanceButtonHistory = ButtonHistory(self)
def ChangeIndex(self, Input):
self.setCurrentIndex(Input)
print(self.currentIndex()) # <--- Prints Correctly
class LayoutTabButtons(QHBoxLayout):
def __init__(self):
super().__init__()
# Children #
self.addWidget(ButtonOrders(Tabs()))
self.addWidget(ButtonHistory(Tabs()))
class ButtonOrders(QPushButton):
def __init__(self, Tabs):
super().__init__()
# Content #
self.setText('Orders')
# Connections #
self.clicked.connect(lambda: self.SetIndex(Tabs))
def SetIndex(self,Tabs):
Tabs.ChangeIndex(0)
class ButtonHistory(QPushButton):
def __init__(self, Tabs):
super().__init__()
# Content #
self.setText('History')
# Connections #
self.clicked.connect(lambda: self.SetIndex(Tabs))
def SetIndex(self,Tabs):
Tabs.ChangeIndex(1)
InstanceWindow = Window()
sys.exit(Application.exec_())
顺便说一句,我的第一个直觉是浏览 PyQt5 模块文件,以便了解默认行为是如何完成的,但由于 Qt 是用 C++ 编写的,所以这里不是一个选项。