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) 

setYDirの最後のループで実行しようとしているのは、リストに表示されている要素ごとにボタンを作成することです。ただし、正しく機能していないようです。ツールバーでクリックしたボタンによっては、ボタンが更新されません。何か助けはありますか?

4

1 に答える 1

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_()
于 2012-05-30T08:28:14.487 に答える