在每个循环中为 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的最后一个循环中尝试做的是为列表显示中的每个元素创建一个按钮。但是,它似乎无法正常工作。它不会根据我在工具栏中单击的按钮更新按钮。有什么帮助吗?

好吧,如果您在不使用布局的情况下将组件添加到父小部件,并且在对父小部件调用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_()

最新更新