Python - 使用 Tkinter 的骰子滚子
Python - Dice Roller using Tkinter
我在 windows 计算机系统上使用应用程序 Canopy。我正在尝试创建一个有趣且简单的掷骰子游戏。游戏运行正常,但我无法成功添加骰子图像作为滚动按钮。我似乎收到一个错误,我无法真正找到任何资源。我只是想知道我是否将事情实施到错误的地方?或者如果图像代码根本不起作用。我不希望人们为我做这件事,我只需要一个简单的答案来判断我是否正确地完成了这项工作,并且我可能只需要修改一些东西。
谢谢!
编译提供的错误: TclError:图像 "pyimage26" 不存在
当前常设代码如下...
import random
import Tkinter
from PIL import ImageTk, Image
import os
win = Tkinter.Tk()
win.title("Die Roller")
class die():
import Tkinter
def __init__(self,ivalue,parent):
self.label_var = Tkinter.IntVar()
self.label_var.set(ivalue)
self.display = Tkinter.Label(parent,relief='ridge', borderwidth=4,
textvariable=self.label_var)
self.display.pack(side='left')
img = ImageTk.PhotoImage(Image.open("meme.jpg"))
panel =Tkinter.Label(win, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
win.mainloop()
def roll(self):
value = random.randint(1,6)
self.label_var.set(value)
print "You rolled = ", value
def rollin():
d1.roll()
d2.roll()
d3.roll()
row1 = Tkinter.Frame(win)
row2 = Tkinter.Frame(win)
d1 = die(1,row1)
d2 = die(1,row1)
d3 = die(1,row1)
row1.pack()
rolldice = Tkinter.Button(row2, command=rollin, text = "Roll The Die")
rolldice.pack()
row2.pack()
win.mainloop()
我刚刚重新格式化了您的代码,以便范围有意义并提出:
import random
import Tkinter
from PIL import ImageTk, Image
class die():
def __init__(self,ivalue,parent):
self.label_var = Tkinter.IntVar()
self.label_var.set(ivalue)
self.display = Tkinter.Label(parent,relief='ridge', borderwidth=4,
textvariable=self.label_var)
self.display.pack(side='left')
def roll(self):
value = random.randint(1,6)
self.label_var.set(value)
print "You rolled = ", value
def rollin():
d1.roll()
d2.roll()
d3.roll()
if __name__=="__main__":
win = Tkinter.Tk()
win.title("Die Roller")
row1 = Tkinter.Frame(win)
row2 = Tkinter.Frame(win)
d1 = die(1,row1)
d2 = die(1,row1)
d3 = die(1,row1)
row1.pack()
rolldice = Tkinter.Button(row2, command=rollin, text = "Roll The Die")
rolldice.pack()
row2.pack()
img = ImageTk.PhotoImage(Image.open("meme.jpg"))
panel =Tkinter.Label(win, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
win.mainloop()
您的代码存在一些问题。
首先,您使用 win.mainloop()
两次,这没有任何意义。
其次,你必须确保你的范围是正确的。上面代码(我的)中的全局图像变量 img
在 global 范围内声明。
你的在 class 之外被删除了。因此它不再可用。
您的 os 导入 (import os
) 未使用,所以我将其删除。
永远记住不仅要为调用 python 格式化代码,还要保持代码整洁并使用语言提供的作用域功能(例如 if __name__=="__main__"
保持全局作用域的结构。
我在 windows 计算机系统上使用应用程序 Canopy。我正在尝试创建一个有趣且简单的掷骰子游戏。游戏运行正常,但我无法成功添加骰子图像作为滚动按钮。我似乎收到一个错误,我无法真正找到任何资源。我只是想知道我是否将事情实施到错误的地方?或者如果图像代码根本不起作用。我不希望人们为我做这件事,我只需要一个简单的答案来判断我是否正确地完成了这项工作,并且我可能只需要修改一些东西。 谢谢!
编译提供的错误: TclError:图像 "pyimage26" 不存在
当前常设代码如下...
import random
import Tkinter
from PIL import ImageTk, Image
import os
win = Tkinter.Tk()
win.title("Die Roller")
class die():
import Tkinter
def __init__(self,ivalue,parent):
self.label_var = Tkinter.IntVar()
self.label_var.set(ivalue)
self.display = Tkinter.Label(parent,relief='ridge', borderwidth=4,
textvariable=self.label_var)
self.display.pack(side='left')
img = ImageTk.PhotoImage(Image.open("meme.jpg"))
panel =Tkinter.Label(win, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
win.mainloop()
def roll(self):
value = random.randint(1,6)
self.label_var.set(value)
print "You rolled = ", value
def rollin():
d1.roll()
d2.roll()
d3.roll()
row1 = Tkinter.Frame(win)
row2 = Tkinter.Frame(win)
d1 = die(1,row1)
d2 = die(1,row1)
d3 = die(1,row1)
row1.pack()
rolldice = Tkinter.Button(row2, command=rollin, text = "Roll The Die")
rolldice.pack()
row2.pack()
win.mainloop()
我刚刚重新格式化了您的代码,以便范围有意义并提出:
import random
import Tkinter
from PIL import ImageTk, Image
class die():
def __init__(self,ivalue,parent):
self.label_var = Tkinter.IntVar()
self.label_var.set(ivalue)
self.display = Tkinter.Label(parent,relief='ridge', borderwidth=4,
textvariable=self.label_var)
self.display.pack(side='left')
def roll(self):
value = random.randint(1,6)
self.label_var.set(value)
print "You rolled = ", value
def rollin():
d1.roll()
d2.roll()
d3.roll()
if __name__=="__main__":
win = Tkinter.Tk()
win.title("Die Roller")
row1 = Tkinter.Frame(win)
row2 = Tkinter.Frame(win)
d1 = die(1,row1)
d2 = die(1,row1)
d3 = die(1,row1)
row1.pack()
rolldice = Tkinter.Button(row2, command=rollin, text = "Roll The Die")
rolldice.pack()
row2.pack()
img = ImageTk.PhotoImage(Image.open("meme.jpg"))
panel =Tkinter.Label(win, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
win.mainloop()
您的代码存在一些问题。
首先,您使用 win.mainloop()
两次,这没有任何意义。
其次,你必须确保你的范围是正确的。上面代码(我的)中的全局图像变量 img
在 global 范围内声明。
你的在 class 之外被删除了。因此它不再可用。
您的 os 导入 (import os
) 未使用,所以我将其删除。
永远记住不仅要为调用 python 格式化代码,还要保持代码整洁并使用语言提供的作用域功能(例如 if __name__=="__main__"
保持全局作用域的结构。