【问题标题】:how to set background image to a window using Tkinter python 2.7如何使用 Tkinter python 2.7 将背景图像设置为窗口
【发布时间】:2014-05-08 18:46:20
【问题描述】:

我正在设置背景图像,并在该图像上添加标签、按钮和所有内容。一切都来了,但不是在背景图像上,它是这样的:

我的代码是:

from Tkinter import Tk, Frame, BOTH
import Tkinter
from PIL import Image, ImageTk

class Example(Frame):

   def __init__(self, parent):
      Frame.__init__(self, parent)            
      self.parent = parent        
      self.initUI()

   def initUI(self):

      self.parent.title("PISE")
      self.pack(fill=BOTH, expand=1)

root = Tk()
root.geometry("1111x675+300+300")
app = Example(root)

im = Image.open('wood.png')
tkimage = ImageTk.PhotoImage(im)
Tkinter.Label(root,image = tkimage).pack()

custName = StringVar(None)
yourName = Entry(app, textvariable=custName)
yourName.pack()

relStatus = StringVar()
relStatus.set(None)

labelText = StringVar()
labelText.set('Accuracy Level')
label1 = Label(app, textvariable=labelText, height=2)
label1.pack()

radio1 = Radiobutton(app, text='100%', value='1', variable = relStatus, command=beenClicked1).pack()
radio2 = Radiobutton(app, text='50%', value='5', variable = relStatus, command=beenClicked5).pack()

root.mainloop()  

如何正确适配背景图片?

提前致谢!

【问题讨论】:

  • 我认为你应该尝试place 而不是 pack()
  • 检查这个:同样的问题:*.com/questions/10158552/…
  • @shaktimaan ,它的工作但只显示背景,没有显示其他小部件

标签: python python-2.7 tkinter


【解决方案1】:

您应该使用place() 放置图像,然后使用grid()(我个人更喜欢网格)或pack() 放置其他小部件。

from Tkinter import Tk, Frame, BOTH
import Tkinter
from PIL import Image, ImageTk

class Example(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)            
        self.parent = parent        
        self.initUI()

    def initUI(self):
        self.parent.title("PISE")
        self.pack(fill=BOTH, expand=1)

root = Tk()
root.geometry("1111x675+300+300")
app = Example(root)

im = Image.open('Test1.png')
tkimage = ImageTk.PhotoImage(im)
myvar=Tkinter.Label(root,image = tkimage)
myvar.place(x=0, y=0, relwidth=1, relheight=1)

custName = StringVar(None)
yourName = Entry(root, textvariable=custName)
yourName.pack()

relStatus = StringVar()
relStatus.set(None)

labelText = StringVar()
labelText.set('Accuracy Level')
label1 = Label(root, textvariable=labelText, height=2)
label1.pack()

def beenClicked1():
    pass

def beenClicked5():
    pass

radio1 = Radiobutton(root, text='100%', value='1', variable = relStatus, command=beenClicked1).pack()
radio2 = Radiobutton(root, text='50%', value='5', variable = relStatus, command=beenClicked5).pack()

root.mainloop()

小部件不可见的原因是因为您使用了两个不同的parents,即app(它是Example 类的Instance,所以不要使用它)和root

【讨论】: