簡體   English   中英

使用PyQt5在for循環中使QComboBox小部件可區分

[英]Making QComboBox widgets distinguishable in a for loop using PyQt5

我在創建QComboBox小部件網格的應用程序時遇到麻煩(請參見下圖)。 我使用for循環創建網格的元素。

QComboBox網格布局

我希望能夠分別對待每個QComboBox。 這是沒有嘗試的代碼:

grid = QGridLayout()
combos = [
'1', '1', '1', '', '1', 
'1', '1', '1', '', '1',
'1', '1', '1', '', '1',
'1', '1', '1', '', '1']

positions = [(i,j) for i in range(5) for j in range(5)]
for position, dcombo in zip(positions, combos):
    if dcombo == '':
        continue
    combo = QComboBox()

    for x in range(0, 30):
        combo.addItem(QIcon("/icons/%d.PNG" % x),"")

    combo.setFixedSize(120,100)
    combo.setIconSize(QSize(100,100))
    grid.addWidget(combo, *position)

    comboList['combo{0}'.format(position)] = position

這是我的嘗試,也是我目前遇到的問題:

grid = QGridLayout()
combos = [
'1', '1', '1', '', '1', 
'1', '1', '1', '', '1',
'1', '1', '1', '', '1',
'1', '1', '1', '', '1']

comboList = {}

positions = [(i,j) for i in range(5) for j in range(5)]
for position, drawcombo in zip(positions, combos):
    if drawcombo == '':
        continue
    combo = QComboBox()

    for x in range(0, 30): #
        combo.addItem(QIcon("absolver deck reviewer/icons/%d.PNG" % x),"")

    combo.setFixedSize(120,100)
    combo.setIconSize(QSize(100,100))
    grid.addWidget(combo, *position)

    comboList['combo{0}'.format(position)] = position
    combo.currentIndexChanged.connect(lambda: self.logChange(comboList['combo{0}'.format(position)]))

def logChange(self, currentCombo):
    sender = self.sender()
    print(str(currentCombo) + ' was changed')

print()方法僅返回列表中的最后一個位置(在這種情況下,為(3,4)元組。

當position變量更改時,此變量將被覆蓋,僅打印最后一個變量,如果不希望覆蓋,則必須將其作為參數傳遞給lambda函數。 為此,您還必須將發送信號的變量作為參數傳遞,在您的情況下,請使用以下命令:

combo.currentIndexChanged.connect(
    lambda ix, p=position: self.logChange(comboList['combo{0}'.format(p)]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM