PYQT4 - 为什么我不能在Slot / callback函数中为QMainWindow添加按钮?

时间:2014-07-29 21:21:00

标签: python pyqt signals qmainwindow slots

我需要在QMainWindow中动态创建按钮,并且我通过RefreshData()Slot函数尝试它。 关键是,尽管功能运行和按钮已创建,但它们没有链接到QMainWindow !! 当我将该功能称为独立功能时,此链接可以正常工作。我能做错什么,无法弄明白。 LotOfThanks

array_stations = {}
a = Station("A", 0, 0, 0)
b = Station("B", 50, 50, 0)
c = Station("C", 100, 100, 0)
array_stations[a.ID] = a
array_stations[b.ID] = b
array_stations[c.ID] = c

class GuiView(QtGui.QMainWindow):

    def __init__(self):

        super(GuiView, self).__init__()
        self.initUI()

    def initUI(self):

        #CONTROLE DE ESTACOES - PARA CONTROLAR SE UMA ESTACAO EH NOVA OU NAO
        self.estacoes = {}

        #Set timer para atualizar Widget
        self.timer2 =QtCore.QTimer()

        self.timer2.timeout.connect(self.RefreshData)  ### THIS ONE DOESNT ADD THE BUTTONS....

        self.timer2.start(2000)

        self.RefreshData()  ### ... BUT THIS ONE DOES IT!
        self.layout = QtGui.QVBoxLayout()


    @pyqtSlot()
    def RefreshData(self):
        print "blabla"

        global array_stations

        ########## ADD OR UPDATE BUTTONS #################
        for s in array_stations:
            if not s in self.estacoes:
                # ADICIONO UM BOTAO A LISTA
                self.estacoes[s] = QtGui.QPushButton(s,self)  
                self.estacoes[s].move(array_stations[s].x,array_stations[s].y)

1 个答案:

答案 0 :(得分:0)

加入循环:

self.estacoes[s].show()

编辑:

当我有点匆忙时,我输入了这个回复。为了澄清一点,你正在创建和添加新按钮,但现在你要告诉他们出现。默认情况下,不显示窗口小部件(包括子窗口小部件)。但是,如果您添加新的小部件,则需要再次为新小部件调用show()以使其显示。