0
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?

1 Answer 1

1

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_()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.