背景:我的Tkinter应用程序中有一个小功能,它将列表中的两个随机值随机化,并将它们打印到GUI。但我正努力用随机值获得正确的形象(团队标志)。
目标:随机选择团队名称(来自28个团队的列表),GUI也应该显示团队徽标。按“随机”按钮,生成Team1
我做过研究:我有时间回答这个问题,但我想不出来。这个骰子游戏可以做到这一点,但我需要两个值而不是一个值,而且我的列表中充满了字符串。
例子:https://stackoverflow.com/a/27913052/5132305
import random
import tkinter as tk
from PIL import ImageTk, Image
# Use a class that hold all Team data
class Team():
def __init__(self, name, img_filename):
self.name = name
self.img_filename = img_filename
@property
def image(self):
# TODO: Open image file and return .PhotoImage object
team_logo = Image.open("%s.jpg" % (self.img_filename))
render = ImageTk.PhotoImage(team_logo)
self.img_filename.image = render
return self.img_filename
#This is how the class prints
def __str__(self):
return "Name: {} Image:{}".format(self.name, self.img_filename)
class MainWindow(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
root.geometry("700x450")
text_1 = tk.Label(text="VS", fg="red", anchor="center")
text_1.place(relx=.5, rely=.5, anchor="center")
text_2 = tk.Label(text="RANDOM GAME", fg="green", anchor="n")
text_2.pack(side="top")
# Button for randomize
self.parent = parent
self.frame = tk.Frame(self.parent)
self.randomButton = tk.Button(self.frame, text = 'RANDOM',
command=self.genRanTeam)
self.randomButton.pack(side="bottom")
self.frame.pack(side="bottom")
self.home_name = tk.StringVar()
self.visitor_name = tk.StringVar()
if 0: # TODO: Implement Team.image
# Images, I should somehow use this with home/visitor label?
# Yes, look at TODO in def genRanTeam(...
load = Image.open("%s.jpg" % (self.home.image))
render = ImageTk.PhotoImage(load)
# ONLY, if you decide to use OWN Label for Image
# What you suggest for this? So if I decide to only use home/visitor labels, I don't need next 4 lines of code (after this text?)
self.team_logo = tk.Label(parent, image=render)
self.team_logo.image = render
else:
self.team_logo = None
# Home team
self.home_label = tk.Label(Image = self.team_logo, textvariable=self.home_name)
self.home_label.pack(side="left")
# Visitor team
self.visitor_label = tk.Label(Image = self.team_logo, textvariable=self.visitor_name)
self.visitor_label.pack(side="right")
self.__init__Teams()
# Hold this in a own function for brevity
def __init__Teams(self):
self.teams = [Team('Chicago Fire', 'chicago'), Team('New York \
Red Bulls', 'newyork'), Team('Philadelphia Union', 'phila'),
Team('Toronto FC', 'toronto')]
# Init defaults
self.home = self.teams[0]
self.visitor = self.teams[0]
def genRanTeam(self):
# Use the initalized Teams from MainWindow..__init__
self.__init__Teams()
self.home = random.choice(self.teams)
self.visitor = None
# Loop while home == visitor
while self.visitor is None or self.home.name is self.visitor.name:
self.visitor = random.choice(self.teams)
self.home_name.set(self.home.name)
self.visitor_name.set(self.visitor.name)
# TODO: Configure .team_label with Team.image
# self.home_label.configure(image=self.home.image)
self.home_label.configure(image=self.home.image)
self.visitor_label.configure(image=self.visitor.image)
if __name__ == "__main__":
root = tk.Tk()
main = MainWindow(root)
main.pack(side="top", fill="both", expand=True)
root.mainloop()
现在,当我按下RANDOM按钮时,它会正确地随机变量x的值
我在project/images文件夹中还有28个图像。所有图片都是“team_name.jpg”
问题1:如何循环列表并匹配团队名称和徽标?
感谢所有的帮助,一些代码审查也将是伟大的!(SO中的第一个问题!)
备注:实施团队。形象
运行你的Team.image
给我:
self.img_filename.image = render
AttributeError: 'str' object has no attribute 'image'
你不能添加一个新属性到build dinstr
对象。这将工作,改为:
self.render = ImageTk.PhotoImage(team_logo)
return self.render
评论:我需要再做一次测试吗。团队形象标签?
评论:self.visitor可以显示团队标志吗?
显示任何东西不是class Team()
的功能,而是tk的工作。
.
相关的:更新tkinter-标签与一个图像
问题:列表中的两个随机值需要与图像匹配
这种方法不使用两个列表,它在一个类中定义两个值(团队名称、团队形象)。因此不需要匹配。
例如:
# Use a class that hold all Team data
class Team():
def __init__(self, name, img_filename):
self.name = name
self.img_filename = img_filename
# This is how the class prints
def __str__(self):
return "Name: {} Image:{}".format(self.name, self.img_filename)
class MainWindow(tk.Frame):
def __init__(self, parent, *args, **kwargs):
# Up to 28 teams - Defined in __init__ only once
# Create a list with all Teams using class Team
self.teams = [Team('Chicago Fire', 'logo1.jpg'), Team('New York Red Bulls', 'logo2.jpg'), Team('Philadelphia Union', 'logo3.jpg'), Team('Toronto FC', 'logo4')]
# Init defaults
self.home = self.teams[0]
self.visitor = self.teams[0]
def genRanTeam(self):
# Use the initalized Teams from __init__
self.home = random.choice(self.teams)
self. visitor = None
# Loop while home == visitor
while self.visitor is None or self.home is self.visitor:
self.visitor = random.choice(self.teams)
if __name__ == "__main__":
import time
root = tk.Tk()
main = MainWindow(root)
for _ in range(3):
main.genRanTeam()
print("home:{} :\tvisitor:{}".format(main.home, main.visitor))
time.sleep(1)
输出:
home:Name: Toronto FC Image:logo4 : visitor:Name: Chicago Fire Image:logo1.jpg
home:Name: New York Red Bulls Image:logo2.jpg : visitor:Name: Toronto FC Image:logo4
home:Name: Toronto FC Image:logo4 : visitor:Name: New York Red Bulls Image:logo2.jpg
用Python测试:3.4.2
问题内容: 我需要输出: …,并且应该有一个包含4或5个链接的列表,这些链接指向实际的背景图片以供选择。我该如何使用SASS? 问题答案: Sass的最新版本(v3.3.0)添加了新功能。如果将其与图像列表(以及少量的变量插值)混合使用,则每次编译Sass时,CSS都会带有随机选择的背景图像。例: 如上所述,随机值仅在 编译Sass 时才会更改,而不一定在每次访问页面时更改。
有了上面的地图值列表,我需要在一个伸展过程中根据date1和date2进行排序,从而得到下面的输出… 对于上述输入数据,我要求的O/P顺序是:
问题内容: 我连续有两列:,。有没有一种方法可以像这样进行选择: 我确实意识到那是另一回事。我最接近(带有帮助)的是,尽管它会产生一个浮点数,然后我需要它到ROUND(),这完全是错误的。 除非有人能提出替代方案(这将非常有用),否则我将采用PHP方式。 问题答案: 实际上,这是MySQL中执行所需操作的最佳方法。这也是ActionScript,JavaScript和Python中的最佳方法。老实
本文向大家介绍根据MySQL中其他两个列的值来匹配列的值,包括了根据MySQL中其他两个列的值来匹配列的值的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是根据ID和MatchID显示FirstName的查询- 这将产生以下输出-
大家好, 我正在使用电子邮件验证软件来检查数据集中的电子邮件是否有效。如何使用 pandas 将名为“有效电子邮件”的列中的电子邮件与“电子邮件”列中的电子邮件匹配,并返回“Good_Email”中的值?需要明确的是,结果可能看起来像 此外,让我们假设名为“有效电子邮件”的列将与“电子邮件”列相比随机排序,并且可以缩短长度。(即与示例中所示完全相同)。 提前感谢!
我有一个正在测试的方法,它返回一个对象列表。。。例如“Person”对象。 我有一个“预期的最后名字”列表来验证结果。 我目前有一个工作测试,它循环遍历“expectedLastNames”中的名称,并断言每个名称都包含在“Person”对象列表中。与此类似(请注意,以下代码段位于Kotlin中): 当断言通过时,这非常有效,并验证了我的方法。然而,当测试失败时,这是非常麻烦的,因为一旦遇到缺少的