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 回答