我想在GUI中为字母表中的每个字母制作一个按钮,而不必只为按钮设置100多行

时间:2019-04-27 21:57:51

标签: python

我正在尝试学习PyQt5,我想知道是否有可能使用下面显示的简明形式。 下面的已经工作,但我希望也许有一个压缩的版本。所有按钮最终都将做相同的事情,这就是我正在制作的子手游戏的字眼。

现在,我尝试了一个看起来像这样的for循环。程序中其他所有地方都一样,但是现在我插入了for循环的想法,也许可以解决长度问题。

def initUI(self):
    self.setGeometry(700, 250, 700, 700)
    self.setWindowTitle("Hang-Man")
    btn=[]
    for i in range(27):
        btn.append(i)
        j=i*25
        btn[i].move(20,int(j))
        btn[i] = QPushButton(chr(i), self)
        btn[i].clicked.connect(self.close)

这是实际上按预期工作的代码。一直到z,这里显示的增量。

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.show()

    def initUI(self):
        self.setGeometry(700, 250, 700, 700)
        self.setWindowTitle("Hang-Man")

        btn1 = QPushButton('A', self)
        btn1.move(20, 25)
        btn1.clicked.connect(self.close)

        btn2 = QPushButton('B', self)
        btn2.move(20, 50)
        btn2.clicked.connect(self.close)

        btn3 = QPushButton('C', self)
        btn3.move(20, 75)
        btn3.clicked.connect(self.close)

        ... #this continues all the way to Z

def run():
    app = QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())`

run()

2 个答案:

答案 0 :(得分:0)

只需使用循环:

buttons = {}

def make_buttons(text, number):  # text is a list
    for x in range(1, number+1):
        buttons[f'btn{x}'] = QPushButton(text[x-1], self)
        buttons[f'btn{x}'].move(20, 25*x)
        buttons[f'btn{x}'].clicked.connect(self.close)

答案 1 :(得分:0)

您需要为窗口创建水平布局:

self.createHorizontalLayout()

windowLayout = QVBoxLayout()
windowLayout.addWidget(self.horizontalGroupBox)

您可以在PyQT5 website

上获得更多信息。