【发布时间】:2021-05-29 18:50:20
【问题描述】:
我正在尝试使用 Tkinter 库在 python 中制作 GUI。我使用了类,以便可以设置外观统一的按钮和框架。我遇到的问题是,当我将按钮放置、打包或网格到框架中时,没有显示小部件。我正在尝试让播放小部件显示在控件小部件中。
import tkinter as tk
HEIGHT = 457
WIDTH = 600
MAIN_COLOR = '#0e2625'
FG_COLOR = 'white'
photo = []
def playing():
print('is playing')
# Create a frame framework
class Frames(tk.LabelFrame):
def __init__(self, name, master, width, height, color=MAIN_COLOR, **kw):
super().__init__(master, **kw)
self.name = name
self.master = master
self.width = width
self.height = height
self.color = color
self.frame = tk.LabelFrame(self.master, text=self.name, width=self.width, height=self.height, bg=self.color)
self.frame['foreground'] = FG_COLOR
def grid(self, row, column, rowspan=None, columnspan=None):
self.frame.grid(row=row, column=column, rowspan=rowspan, columnspan=columnspan, padx=5)
# class to use as blueprint for buttons
class Buttons(tk.Button):
counter = 0
def __init__(self, name, master, command, image, **kw):
super().__init__(master, **kw)
self.name = name
self.image = image
self.master = master
self.command = command
self.ref = Buttons.counter
global photo
img = tk.PhotoImage(file=self.image)
img = img.subsample(5, 5)
photo.append(img)
self.name = tk.Button(self.master, text=name, command=command, width=10, image=photo[self.ref], compound='left')
Buttons.counter += 1
# configuring the root screen
root = tk.Tk()
root.title('PlayR')
root.configure(bg=MAIN_COLOR)
screen = str(WIDTH) + 'x' + str(HEIGHT)
root.geometry(screen)
root.resizable(False, False)
detail_frame = Frames('detail', root, (WIDTH / 2) - 10, 350)
detail_frame.grid(0, 0, 1, 1)
image_frame = Frames('cover', root, (WIDTH / 2) - 10, 350)
image_frame.grid(0, 1, 1, 1)
control_frame = Frames('controls', root, WIDTH - 20, 100)
control_frame.grid(1, 0, 1, 2)
play = Buttons('play', control_frame, playing, 'Assets/play-button-arrowhead.png')
play.grid(row=0, column=0)
pause = Buttons('pause', control_frame, playing, 'Assets/pause.png')
pause.grid(row=0, column=1)
stop = Buttons('stop', control_frame, playing, 'Assets/stop.png')
stop.grid(row=0, column=2)
prev = Buttons('prev', control_frame, playing, 'Assets/previous.png')
prev.grid(row=0, column=3)
play_next = Buttons('next', control_frame, playing, 'Assets/next.png')
play_next.grid(row=0, column=4 )
root.mainloop()
【问题讨论】:
-
您知道当您调用
Frames.__init__方法时会创建2 个tk.LabelFrames 对吗? -
另外你不需要
global photo,因为它是一个可变对象。
标签: tkinter button widget frame display