Python - Dice Roller с использованием Tkinter
Я использую приложение Canopy в компьютерной системе Windows. Я пытаюсь создать веселую и простую игру в кости. Игра работает, однако я не могу успешно добавить изображение кости в качестве кнопки прокрутки. Кажется, я получаю сообщение об ошибке, на котором не могу найти никаких ресурсов. Мне только интересно, внедряю ли я вещи не в то место? Или если код изображения даже не будет работать вообще. Я не хочу, чтобы люди делали это для меня, мне просто нужен простой ответ, если я правильно завершаю это, и мне нужно только кое-что подправить. Спасибо!
Ошибка при компиляции: 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()
1 ответ
Я просто переформатировал ваш код так, чтобы прицелы имели какой-то смысл, и придумал:
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
внутри кода выше (мой) объявлен внутри глобальной области видимости.
Ваш удаляется за пределами класса. Поэтому он больше не доступен.
Ваш ОС импорт (import os
) не используется, поэтому я удалил его.
Всегда не забывайте форматировать код не только для вызова в python, но также поддерживать его в чистоте и использовать функциональные возможности области, заданные языком (например, if __name__=="__main__"
конструкции, которые сохраняют глобальный охват.