我正在用PyQt5做一个图形界面的程序。我想要做的是,当用户按下某个按钮时,此更改小部件并显示其他选项。
为此,我决定使用QStackedWidget,我的所有界面都是从QT5设计器构建的。
然而,在我的代码中,想要确定按下我的名字按钮"btfr“时显示我的stackedWidget的"page_2”,使用QStackedWidget.setCurrentIndex方法,这不会做任何事情或产生任何错误。
代码如下:
import sys
from PyQt5 import uic
from PyQt5.QtCore import QTimeLine
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
infz = uic.loadUiType("main.ui")[0]
class FaderWidget(QWidget):
def __init__(self, old_widget, new_widget):
QWidget.__init__(self, new_widget)
self.old_pixmap = QPixmap(new_widget.size())
old_widget.render(self.old_pixmap)
self.pixmap_opacity = 1.0
self.timeline = QTimeLine()
self.timeline.valueChanged.connect(self.animate)
self.timeline.finished.connect(self.close)
self.timeline.setDuration(333)
self.timeline.start()
self.resize(new_widget.size())
self.show()
def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setOpacity(self.pixmap_opacity)
painter.drawPixmap(0, 0, self.old_pixmap)
painter.end()
def animate(self, value):
self.pixmap_opacity = 1.0 - value
self.repaint()
class StackedWidget(QStackedWidget):
def __init__(self, parent=None):
QStackedWidget.__init__(self, parent)
def setCurrentIndex(self, index):
self.stack = MyWindowClass()
self.a = self.stack.stackedWidget.currentWidget()
self.b = self.stack.stackedWidget.widget(index)
self.fader_widget = FaderWidget(self.a, self.b)
QStackedWidget.setCurrentIndex(self, index)
print(self, index)
def setPage1(self):
self.setCurrentIndex(0)
def setPage2(self):
self.setCurrentIndex(1)
class MyWindowClass(QStackedWidget, infz):
def __init__(self, parent=None):
global pos, c, f
self.pos = 0
self.c = []
self.f = False
QStackedWidget.__init__(self, parent)
self.setupUi(self)
self.setWindowTitle('SkR')
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyWindowClass()
window.resize(788, 518)
stack = StackedWidget()
window.btfr.clicked.connect(stack.setPage2)
window.btnpx.clicked.connect(stack.setPage1)
window.show()
sys.exit(app.exec_())
我对这段代码的意图是,小部件的更改会产生这样的效果:“淡出”。
如果我打印"self“和"index”,接收的QStackedWidget.setCurrentIndex显示如下:
<__main__.StackedWidget object at 0x7fc2eb6b5c18> 0
数字0是索引,另一个元素是self
谢谢你的关注,我希望有人能帮上忙。
发布于 2016-08-26 12:00:00
你的问题不是很清楚,但你不是只是想:
def setIndex(self, index):
self.setCurrentIndex(index)
但是,这有点多余,因为您应该能够将按钮直接链接到setCurrentIndex
方法,并使用lambda
传递索引值:
btfr.clicked.connect(lambda: self.setCurrentIndex(2))
https://stackoverflow.com/questions/39155952
复制相似问题