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() 两次,这没有任何意义。

其次,你必须确保你的范围是正确的。上面代码(我的)中的全局图像变量 imgglobal 范围内声明。

你的在 class 之外被删除了。因此它不再可用。

您的 os 导入 (import os) 未使用,所以我将其删除。

永远记住不仅要为调用 python 格式化代码,还要保持代码整洁并使用语言提供的作用域功能(例如 if __name__=="__main__" 保持全局作用域的结构。