user2315
user2315

Reputation: 831

Creating a button for PyQT window at each loop

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) 

What I'm trying to do in the last loop in setYDir is create a button for each element in the list shows. However, it doesn't seem to be working right. It does not update the buttons depending on thebutton I click in the toolbar. Any help?

Upvotes: 0

Views: 1587

Answers (1)

mata
mata

Reputation: 69082

Well, if you add components to a parent widget without using a layout and after you've called show on the parent, you'll have to show the children yourself.

Also, all your buttons are overlapping, so you'll only see the last one added. When posting source it's always good to strip it down to the minimum required to run it. In this case that would look something like this:

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_()

Upvotes: 1

Related Questions