繁体   English   中英

Python Tkinter按钮未显示

[英]Python tkinter button isn't displaying

我正在制作纸牌游戏(称为怪物大师)来发展我的python技能,特别是OOP。

我有一个GUI,其中包含一些静态对象:桌子1的一侧,桌子2的一侧,中间有一条细线,我现在尝试实现“结束转弯”按钮。

我尝试了很多不同的方法来尝试使此按钮显示,但是即使没有错误,我也无法使其显示。 只是说,为了暂时了解此按钮的问题,我暂时删除了一些注释行。

这是我目前正在尝试使用的代码:

def RunGame():
class App():
    """docstring for App"""

    def draw():
        # Setting up canvas dimensions

        canvas_width = 640
        canvas_height = 480

        master = Toplevel()
        master.title("Monster Master by Charles Cameron - Game")
        master.resizable(width=False, height=False)
        master.geometry("640x480")

        w = Canvas(master, 
                   width=canvas_width, 
                   height=canvas_height)
        w.pack()

        # Drawing static objects 
        CentrePoints = [(0, canvas_height/2), (canvas_width/2, canvas_height/2), 
            (canvas_width, canvas_height/2)] 
            #Left, centre and right centres (save me from retyping them)

        Player1Area = w.create_rectangle(CentrePoints[0], canvas_width,
            canvas_height, fill="#303AFE") #Player1 Area
        Player2Area = w.create_rectangle(0, 0, CentrePoints[2], 
            fill="#C31B1B") #Player2 Area

        Barrier = w.create_line(CentrePoints[0], CentrePoints[2], 
            fill="#0090E3", width=20) # Centre barrier

        # class GameBtn():
        #   class EndTurnBtn():
        #       def __init__(self, BtnName, master):
        BtnName = Button(master, bg="white", command=lambda:print("Clicked!"))

        image = ImageTk.PhotoImage(file="imgs\EndTurn.png")
        BtnName.config(image=image, width="70", height="70")

        BtnName.pack(side=RIGHT)

        # ChangeTurn = GameBtn.EndTurnBtn('ChangeTurn', master)

        master.mainloop()

Window = App()
App.draw()

当我在自己的脚本中尝试该按钮时,实际按钮的按钮代码工作正常,但是当我将其放入该程序时,该按钮代码停止工作。

希望问的不是太愚蠢的问题,相当一部分python爱好者仍然诚实地在网上找不到答案。

非常感谢

您的按钮存在,但已超出窗口边缘。 这是因为您将窗口设置为640x480,然后用640x480画布完全填充了它。 删除master.geometry("640x480")行,窗口将拉伸以包含画布和按钮。

您可能会想“我不希望按钮出现在画布的侧面。我希望按钮出现在画布上。画布仅存在是因为我想给背景的某些部分上色”。 可以使用create_window小部件嵌入画布中(请参阅如何在Tkinter的Canvas小部件中放置小部件? ),但是通过将Frame对象堆叠在一起并为其赋予单独的颜色来创建彩色背景可能更为实用。 例:

from tkinter import Tk, Frame, Button

root = Tk()
root.geometry("640x480")
top_player_frame = Frame(root, height=230, bg="red")
barrier = Frame(root, height=20, bg="green")
bottom_player_frame = Frame(root, height = 230, bg="blue")

#configure column 0 so frames can stretch to fit width of window
root.columnconfigure(0, weight=1)

top_player_frame.grid(row=0, sticky="we")
barrier.grid(row=1, sticky="we")
bottom_player_frame.grid(row=2, sticky="we")

bottom_player_end_turn_button = Button(bottom_player_frame, text="End Turn")
#use `place` here because `pack` or `grid` will collapse the frame to be only as tall as all the widgets it contains, i.e. just this button
bottom_player_end_turn_button.place(x=10,y=10)

root.mainloop()

结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM