我正在尝试将两个图像按钮放在我的图像背景上某个位置,但我的按钮没有出现。我认为他们的图像背后是背后的。
我尝试使用place
和pack
,两者都无效。可能是什么问题?
from tkinter import*
import tkinter as tk
import settings
class Application(Frame):
def __init__ (self, master):
Frame.__init__(self,master)
self.grid()
self.create_widgets()
def create_widgets(self):
button1 = PhotoImage(file ="button1.gif")
button2 = PhotoImage(file ="button2.gif")
settings_button = Button(self, image = button1,
command = self.mult_command, width = 15)
settings_button.place(x=1, y=1)
rules_button = Button(self, image = button2,
command = self.the_rules, width = 15)
rules_button.place(x=50, y=50)
def main_code():
window = Tk()
window.title("The Bouncer")
bg_image = PhotoImage(file ="pic.gif")
x = Label (image = bg_image)
x.image = bg_image
x.place(x = 0, y = 0, relwidth=1, relheight=1)
window.geometry("600x300")
app = Application(window)
window.mainloop()
main_code()
感谢
答案 0 :(得分:2)
您的图片可能在显示之前被垃圾收集。这是常见的Tkinter陷阱。尝试更改行:
button1 = PhotoImage(file ="button1.gif")
button2 = PhotoImage(file ="button2.gif")
到
self.button1 = PhotoImage(file ="button1.gif")
self.button2 = PhotoImage(file ="button2.gif")
并使用
settings_button = Button(self, image = self.button1, command = self.mult_command, width = 15)
等
这应该保留对您图像的引用,阻止它收集垃圾。
答案 1 :(得分:1)
除了保留对图像的引用外,此行还有问题:
self.grid()
__init__
Application
方法中的。它将框架网格化到窗口中,但由于框架中没有任何东西被打包或网格化,因此它不会扩展到一个小小的框架,所以你只是看不到按钮在里面。这里的一个简单修复是pack
方法,窗口fill
的参数和需要时expand
的参数:
self.pack(fill=BOTH, expand=1)