Python 避免重复编码的一种方法

Python 避免重复编码的一种方法,python,tkinter,Python,Tkinter,我正在尝试使用tkinter显示图像。我注意到这里有重复的代码。我试图摆脱这些代码来显示图像。我的目标是不以离散的方式显示大量图像,而是以数量动态地显示它们 请帮忙,谢谢 def __init__(self): Frame.__init__(self) self.master.title("Black Jack") blackjack = Blackjack() self.grid() self._playerCardImage = PhotoImage

我正在尝试使用tkinter显示图像。我注意到这里有重复的代码。我试图摆脱这些代码来显示图像。我的目标是不以离散的方式显示大量图像,而是以数量动态地显示它们

请帮忙,谢谢

def __init__(self):
    Frame.__init__(self)
    self.master.title("Black Jack")
    blackjack = Blackjack()
    self.grid()

    self._playerCardImage = PhotoImage(file=str(blackjack._player._cards[0].fileName))
    self._playerCardLabel = Label(self, image = self._playerCardImage)
    self._playerCardLabel.grid(row=0, column=0)


    self._playerCardImage1 = PhotoImage(file=str(blackjack._player._cards[1].fileName))
    self._playerCardLabel1 = Label(self, image = self._playerCardImage1)
    self._playerCardLabel1.grid(row=0, column=1)

    self._dealerCardImage = PhotoImage(file=str(blackjack._dealer._cards[0].fileName))
    self._dealerCardLabel = Label(self, image = self._dealerCardImage)
    self._dealerCardLabel.grid(row=0, column=2)

    self._dealerCardImage1 = PhotoImage(file=str(blackjack._dealer._cards[1].fileName))
    self._dealerCardLabel1 = Label(self, image = self._dealerCardImage1)
    self._dealerCardLabel1.grid(row=0, column=3)

现在还不清楚你的模式到底是什么,但如果这是我所怀疑的,那么下面的方法应该有效:

for index in range(<your range>):
    if index % 4 == 0:
        self._playerCardImage = PhotoImage(file=str(blackjack._player._cards[index].fileName))
        self._playerCardLabel = Label(self, image = self._playerCardImage)
        self._playerCardLabel.grid(row=0, column=index)

    elsif index %4 == 1:
        self._playerCardImage1 = PhotoImage(file=str(blackjack._player._cards[index].fileName))
        self._playerCardLabel1 = Label(self, image = self._playerCardImage1)
        self._playerCardLabel1.grid(row=0, column=index)
    ...
范围()中的索引的
:
如果索引%4==0:
self.\u player cardimage=PhotoImage(file=str(21点.\u player.\u cards[index].fileName))
self.\u playerCardLabel=标签(self,image=self.\u playerCardImage)
self.\u playerCardLabel.grid(行=0,列=索引)
elsif索引%4==1:
self.\u playerCardImage1=PhotoImage(file=str(21点.\u player.\u cards[index].fileName))
self.\u playerCardLabel1=标签(self,image=self.\u playerCardImage1)
self.\u playerCardLabel1.grid(行=0,列=索引)
...

您应该能够使用index变量上的mod操作计算行/列/文件索引。如果只有四个分支(如上面的示例所示),您的If语句中将有四个分支。

谢谢您的评论。我尝试过这种方法,但标签会刷新并仅显示最后一个图像:(啊,我明白了。问题是变量
playerCardImage/Label
的使用。您需要将索引附加到变量名,如下所示:
val=getattr(self,'playerCardImage'+str(index)
,用于您分配的每个属性。