- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
背景: 我的 Tkinter 应用程序中有一个小功能,它从列表中随机化两个随机值并将它们打印到 GUI。但我正在努力获得具有随机值的正确图像(团队 Logo )。
目标: 是随机团队名称(来自 28 个团队的列表)并且 GUI 也应该显示团队标志。按下“RANDOM”按钮,它会生成 Team1 和 Team2,两者都应该在文本旁边有 Logo 。
我已经研究过:我有时间回答这个问题,但我无法弄明白。这个骰子游戏有点像,但我需要两个值而不是一个值,而且我的列表中充满了字符串。
示例: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 和 y 随机正确取值。
我在文件夹 project/images 中也有 28 张图片。所有图片均为“team_name.jpg”
问题 1:如何循环列出并匹配团队名称和 Logo ?
感谢所有帮助,一些代码审查也很棒! (SO 中的第一个问题!)
最佳答案
Comment: Implement Team.image
运行你的 Team.image
给我:
self.img_filename.image = render
AttributeError: 'str' object has no attribute 'image'
您不能向构建str
对象添加新属性。这将起作用,更改为:
self.render = ImageTk.PhotoImage(team_logo)
return self.render
Comment: Do I need to make another tk.Label for team image?
不需要这样做,这取决于你想要的布局。
从一个开始 tk.Label(self, image=image, textvariable=name)
这看起来像:
相关:label-on-top-of-image-in-python
Comment: Is it possible that self.visitor can show team+logo?
显示任何东西不是 class Team()
的功能,而是 tk.Lable(...
的工作。
相关:updating-tkinter-label-with-an-image
Question: Two random values from list needs to match with images
这种方法不使用两个列表,它在一个类中定义两个值(团队名称、团队形象)。因此不需要匹配。
例如:
# 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)
Output:
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
关于python - 列表中的两个随机值需要与图像匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52579782/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!