在每个循环中为PyQT窗口创建一个按钮

时间:2012-05-28 16:56:39

标签: python pyqt

class Test(QtGui.QMainWindow):  
    def __init__(self):
        super(Test, self).__init__()

        self.initUI()

    def initUI(self):
        YDrive = QtGui.QAction(QtGui.QIcon('y.gif'), 'Exit', self)
        SDrive = QtGui.QAction('S', self)
        GDrive = QtGui.QAction('G', self)
        AddDrive = QtGui.QAction('+', self)
        YDrive.triggered.connect(self.setYDir)

        SDrive.triggered.connect(self.setSDir)
        GDrive.triggered.connect(self.setGDir)

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(YDrive)
        self.toolbar.addAction(SDrive)
        self.toolbar.addAction(GDrive)
        self.toolbar.addAction(AddDrive)

        #btn1 = QtGui.QPushButton("Button 1", self)
        #btn1.move(30, 50)

        #btn2 = QtGui.QPushButton("Button 2", self)
        #btn2.move(150, 50)

        #btn1.clicked.connect(self.buttonClicked)            
        #btn2.clicked.connect(self.buttonClicked)


        self.setGeometry(300, 300, 250, 150)
        self.center()
        self.setWindowTitle('Message box')    
        self.show()

    def setYDir(self):
        myInputs[1] = "Y"
        print "myInputs[1] CHANGED to Y"
        myWorkDrive = "Y:\\HoC_Jobs\\"
        shows = self.listDirs(myWorkDrive)

        for elements in shows:
            btn1 = QtGui.QPushButton(elements, self)
            btn1.move(30, 50)
            btn1.clicked.connect(self.buttonClicked) 

我在setYDir的最后一个循环中尝试做的是为列表中的每个元素创建一个按钮。但是,它似乎没有正常工作。它不会更新按钮,具体取决于我在工具栏中单击的按钮。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

好吧,如果您在不使用布局的情况下向父窗口小部件添加组件,并且在父级上调用show之后,您必须自己show这些孩子。

此外,您的所有按钮都重叠,因此您只会看到添加的最后一个按钮。在发布源代码时,最好将其删除到运行它所需的最低要求。在这种情况下看起来像这样:

from PyQt4 import QtGui
import os

class Test(QtGui.QMainWindow):  
    def __init__(self):
        super(Test, self).__init__()

        self.initUI()

    def initUI(self):
        YDrive = QtGui.QAction("Y", self)
        YDrive.triggered.connect(self.setYDir)

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(YDrive)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Message box')    
        self.show()

    def buttonClicked(self):
        print "clicked"

    def setYDir(self):
        myWorkDrive = "/tmp"
        shows = os.listdir(myWorkDrive)
        i = 0
        for elements in shows:
            btn1 = QtGui.QPushButton(elements, self)
            btn1.move(30, 50 + i)
            i += 30
            btn1.clicked.connect(self.buttonClicked)
            btn1.show()
        self.resize(self.width(), 50 + i)


if __name__ == '__main__':
    app = QtGui.QApplication([])
    t = Test()
    t.show()
    app.exec_()