微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Tkinter中使用背景图像后,按钮放错了位置

如何解决在Tkinter中使用背景图像后,按钮放错了位置

每当我使用背景图像运行此代码时,按钮网格就会放错位置并推向底部。幸运的是,当不添加背景时,它可以按预期工作。我希望它们在执行时覆盖背景。供参考的图片添加如下。非常感谢您的帮助。

# importing the module
import tkinter.messageBox
from tkinter import *
import random
# importing the module

# initialising tkinter
class window(Frame):

    def __init__(self,master = None):
        Frame.__init__(self,master)
        self.master = master
# initialising tkinter

# creating the window
root = Tk()
app = window(root)
root.geometry("630x630")
root.title('Odd Even Game')

C = Canvas(root,bg="blue",height=250,width=300)
filename = PhotoImage(file = "BG.png")
background_label = Label(root,image=filename)
background_label.place(x=0,y=0,relwidth=1,relheight=1)

C.pack()

frame = Frame(root)
frame.pack()
# creating the window

# image
level_1e = "p1.png"
level_1o = "pe.png"
level_2e = "r1.png"
level_2o = "re.png"

# image   
def create_cards(odd_image,even_image,next_level,fno,order,suc,err,w,h):
    rx = random.randint(0,order-1)
    ry = random.randint(0,order-1)
    
    for i in range(0,order):
        for j in range(0,order):
            if i == rx and j == ry:
                create_button(i,j,odd_image,h)
            else:
                create_button(i,h)
  
def second_level(fno):
    fno.pack_forget()
    frame2 = Frame(root)
    frame2.pack()
    suc = "Congratulations! You have cleared level 2..Keep Going Buddy!"
    err = "Wrong Answer..Don't give up yet!"
    create_cards(level_2o,level_2e,final_level,frame2,4,157.5,157.5)

def final_level(fno):
    fno.pack_forget()
    root.geometry("700x700")
    ap = App(root)


# creating a button function
def create_button(x,y,msg,picture,odd,h):
    if picture == odd:
        image = PhotoImage(file=picture)
        click = Button(fno,image=image,width= w,height=h,bd = 0,command = lambda : [score_update(),next_level(fno),tkinter.messageBox.showinfo( "Odd One Out Project",msg)])
        click.image = image
        click.grid( row = x,column = y)
        
    else:
        image = PhotoImage(file=picture)
        click = Button(fno,command = lambda : [next_level(fno),column = y)

# creating a button function

def create_frame(fno):
    root.geometry("630x630")
    fno.pack_forget()
    frame = Frame(root)
    frame.pack()
    suc = "Congratulations! You have cleared level 1..Time to increas[![enter image description here][1]][1]e the difficulty!"
    err = "Wrong Answer..Please Try again !!"
    create_cards(level_1o,level_1e,second_level,frame,3,200,200)

def intro():
    root.geometry("630x630")
    frame0 = Frame(root)
    frame0.pack()
    click = Button(frame0,text="Start!",command = lambda [create_frame(frame0),"The game has begun!!")])
    click.pack()

intro()

# starting the widget
root.mainloop()
# starting the widget

The Problem as I'm facing

The desired product

一个图像是错误。第二张图片是必需的输出。 注意:我仍然是Python和Tkinter的初学者,因此各种术语和方法可能超出我的范围。如果考虑在内,将不胜感激。

如果需要,您可能会知道这是一个tkinter项目,用于从A * A网格中拾取奇数一张图像。

解决方法

我自己得到了答案,因此可以共享以供将来使用。

C = Canvas(root,bg="blue",height=250,width=300)

此部分绘制250 * 300尺寸的画布,因此不允许按钮在其上绘制。

只需将其更改为

C = Canvas(root,height=0,width=0)

获得理想的结果

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。