Python3.4用variab赋值变量

2024-09-29 06:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个相当简单的问题

我知道你可以做到:

foo = 1,
self.card1 = "This is card number %s." % (foo)

但我试着把函数给出的变量赋给名字本身:

def card(foo):
  self.foo = foo
  self.usrCrdImg%self.foo = Image.open(self.crdStk[randint(1, 50)])
  self.usrCrdBg%self.foo = ImageTk.PhotoImage(usrCrdImg%self.foo)
  self.usrCrd%self.foo = tkinter.Label(root, image=usrCrdBg%self.foo)
  self.usrCrd%self.foo.image = self.usrCrdBg%self.foo

card(1)
#Should Execute like this
def card(1):
  self.usrCrdImg1 = Image.open(self.crdStk[randint(1, 50)])
  self.usrCrdBg1 = ImageTk.PhotoImage(usrCrdImg1)
  self.usrCrd1 = tkinter.Label(root, image=usrCrdBg1)
  self.usrCrd1.image = self.usrCrdBg1 

一旦我得到了这个问题的答案,我还有一个问题要问。你知道吗

这是我的密码

import tkinter
import winsound
from tkinter import *
from PIL import Image, ImageTk
from random import randint, randrange

class CardGame(tkinter.Frame):

  def __init__(self, root):

    tkinter.Frame.__init__(self, root)

    #define variables for cards
    self.crdImg = []
    usrStk = None
    cpuStk = None
    #define card images
    i = 1
    while i < 57:
      i = i + 1
      self.crdImg.append('img/cards/%s.png' % (i - 1))

    usrStk = self.crdImg[54]
    cpuStk = self.crdImg[55]

  def debug(card):
    self.card = card
    self.usrCrdImg%self.card = Image.open(self.crdStk[randint(1, 50)])
    self.usrCrdBg%self.card = ImageTk.PhotoImage(self.usrCrdImg%self.card)
    self.usrCrd%self.card = tkinter.Label(root, image=self.usrCrdBg%self.card)
    self.usrCrd%self.card.image = self.usrCrdBg%i
  def card(self):

    ###
    self.usrStk1 = self.crdImg[54]
    self.cpuStk1 = self.crdImg[55]
    ##
    self.usrCrdImg1 = Image.open(self.usrStk1)
    self.usrCrdBg1 = ImageTk.PhotoImage(self.usrCrdImg1)
    self.usrCrd1 = tkinter.Label(root, image=self.usrCrdBg1)
    self.usrCrd1.image = self.usrCrdBg1
    ##
    self.cpuCrdImg1 = Image.open(self.cpuStk1)
    self.cpuCrdBg1 = ImageTk.PhotoImage(self.cpuCrdImg1)
    self.cpuCrd1 = tkinter.Label(root, image=self.cpuCrdBg1)
    self.cpuCrd1.image = self.cpuCrdBg1

Tags: imageimportselffootkinterdefrootopen
2条回答

你想做的是最糟糕的解决问题的方法。一般来说,您不应该尝试动态生成变量名。你知道吗

最简单的解决办法是使用字典。像这样:

def debug(card):
    self.card = card
    self.usrCrd[self.card]["Img"] = ... 
    self.usrCrd[self.card]["Bg"] = ...

不过,更好的解决方案是将“card”作为类的实例。然后,可以将这些属性存储为类的属性:

class Card(object):
    def __init__(self, background, image):
        self.bg = background
        self.img = image
        ...

...
self.usrCrd = Card(...)
self.cpuCrd = Card(...)

如果您绝对必须创建一个变量,例如Tkinter按钮,请使用以下命令:

vars = []
founditems = ['item', 'otheritem']
for i in founditems:
    vars.append(i)
for n in range(len(founditems)-1):
    exec('tkbutton' + vars[i] + '=' + 'Button(textvariable=tv' + vars[i] + ', command=lambda: buttoncommand(' + vars[i] + '))')

基本格式: exec(var + '=' + varvalue)

如果只需要定义变量名,只需执行exec('varname = ' + varvalue)

相关问题 更多 >