我目前正在尝试创建一个程序,允许用户查看用户选择的衬衫与不同裤子组合的图片。
这个程序包含一个目录,里面有衬衫和裤子的图片。用户从下拉菜单中选择衬衫,然后程序生成、保存并显示使用衬衫创建的所有可能组合。为了实现这一点,我使用了tkinter&pil(枕头)。
我的问题是:当用户编辑下拉菜单并选择另一件衬衫时,我希望程序使用该衬衫生成新图像,并替换当前显示的旧图像。
我读过类似问题的答案,有些人建议使用setter和getter,在变量值发生变化时检测并调用函数。我不太确定我是否理解它是如何工作的,也不确定如何在代码中实现它。我要调用的函数位于嵌套循环中。这在这方面有什么区别吗?
这是代码。这个 generateImage()
函数是实际生成图像的多行代码的占位符。
要检测下拉菜单中选定的选项何时更改,我使用 variable.trace
.
shirtcolors = ["blue", "red", "green"]
def ChosenImage(*args):
chosen_image = variable.get()
print("value is: " + chosen_image)
selectedimage = ""
if chosen_image == "blue":
selectedimage = "C:/User/Desktop/OutfitGenerator/shirts/IMG_0840.jpg"
elif chosen_image == "red":
selectedimage = "C:/User/Desktop/OutfitGenerator/shirts/IMG_0850.jpg"
elif chosen_image == "green":
selectedimage = "C:/User/Desktop/OutfitGenerator/shirts/IMG_0860.jpg"
return selectedimage
DropdownList = tk.OptionMenu(frame, variable, *shirtcolors)
DropdownList.pack()
variable.trace("w", callback=ChosenImage)
shirtslist = [ChosenImage()]
pantsdirectory= "C:/User/Desktop/OutfitGenerator/pants"
pantslist = [os.path.abspath(os.path.join(pantsdirecotry, h)) for h in os.listdir(pantsdirecotry)]
for i in shirtslist:
for j in pantslist:
def generateImage(file1, file2):
我的问题是,我不知道如何让程序运行在下面的代码 variable.trace
再排队。当回调被发送到 ChosenImage
我希望它现在使用新的 selectedimage
价值但是,在回调到达指定位置之前,代码无法继续 ChosenImage
函数,并且它已更改其值。
1条答案
按热度按时间klsxnrf11#
我的问题是,我不知道如何使程序再次运行variable.trace行下面的代码。当一个回调被发送到chosenimage时,我希望它也继续代码的其余部分,现在使用新的SelecteImage值。
这是错误的思维方式。您的回调应该生成组合/图像-您的回调不应该返回任何内容,它应该只具有副作用: