PyQt:从另一个函数修改Widget对象

时间:2016-04-19 18:29:12

标签: python pyqt pyqt4

我在PyQt4中制作多页面应用程序,因此每当用户执行特定操作(例如单击按钮)时,窗口小部件中都会有更新。

例如,有5个小部件和一个按钮:

隐藏了3个小部件,显示了2个小部件。

每当我点击按钮时,它都会隐藏2个小部件,并显示那些小部件。

所以在代码中,它应该是这样的:

function changePageSize(pageSize) {
        alert(pageSize);
    }

完整代码:

# startup    
def somefunc(self):
        widget1 = QtGui.QLabel("Widget1", self)
        widget2 = QtGui.QLabel("Widget2", self)
        widget3 = QtGui.QLabel("Widget3", self)
        widget4 = QtGui.QLabel("Widget4", self)
        widget5 = QtGui.QLabel("Widget5", self)
        widget1.setHidden()
        widget2.setHidden()
        widget3.setHidden()
        widget4.show()
        widget5.show()
        btn = QtGui.QPushButton("Click", self)
        btn.clicked.connect(self.SomeotherFunc)

 # My Question: (Code down below doesn't work, it's for example)
 def SomeotherFunc(self):
        self.somefunc.widget1.Show()
        self.somefunc.widget1.Show()
        self.somefunc.widget1.Show()
        self.somefunc.widget4.setHidden()
        self.somefunc.widget5.setHidden()

问题:

如何从其他功能修改某些功能小部件?

2 个答案:

答案 0 :(得分:1)

您需要使用self

在主窗口上存储子窗口小部件的引用
def func(self):
    self.btn = QPushButton(...)
    ...

def other_func(self):
    self.btn.setText('Hello')

答案 1 :(得分:1)

我已经编辑了你的代码。我相信这会起到作用。只需按下按钮,即可看到标签消失。玩得开心: - )

import sys
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(40, 80, 1280, 800)

        # You should make a 'mainWidget' that
        # serves as a container for all your other
        # widgets.
        self.mainWidget = QtGui.QWidget()
        self.setCentralWidget(self.mainWidget)

        self.setWindowTitle("E.S Quiz")
        self.home()
        self.show()


    def home(self):
        # Make the label
        pic = QtGui.QLabel(parent = self.mainWidget)
        pic.setText("My label")
        pic.setGeometry(0, 0, 1280, 800)
        #pic.setPixmap(QtGui.QPixmap(":/images/background.png"))

        # Make a label that will disappear when
        # you push the button.
        self.myLabel = QtGui.QLabel(parent = self.mainWidget)
        self.myLabel.setText("My removable label")
        self.myLabel.setGeometry(40,40,200,100)


        # Make the button
        self.btn = QtGui.QPushButton(parent = self.mainWidget)
        self.btn.setCheckable(True)
        self.btn.setText("My button")
        self.btn.resize(150, 120)
        self.btn.move(600, 400)
        self.btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.btn.setObjectName('btn')
#        self.btn.setStyleSheet("#btn {background-image: url(':/images/Button1.png'); border: none; }"
#        "#btn:hover { background-image: url(':/images/Button1Hover.png'); }"
#        "#btn:pressed { background-image: url(':/images/Button1Press.png'); }")
        self.btn.clicked.connect(self.btnAction)



    def btnAction(self, pressed):
        print("Button pushed")
        if(pressed):
            self.myLabel.setVisible(False)
        else:
            self.myLabel.setVisible(True)





def startup():
    app = QtGui.QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

startup()