1

我需要在 QMainWindow 中动态创建按钮,我正在通过 RefreshData() Slot 函数进行尝试。关键是,尽管函数运行并创建了按钮,但它们并没有链接到 QMainWindow!但是,当我独立调用该函数时,此链接有效。我可能做错了什么,无法弄清楚。非常感谢

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)
4

1 回答 1

0

添加到循环中:

self.estacoes[s].show()

编辑:

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

于 2014-07-31T22:12:29.047 回答