我什么时候应该使用画布而不是标签?

问题描述 投票:0回答:2

上一堂课,说我应该使用 Canvas 对象来显示文本。为什么这比使用标签更好?似乎是一种更复杂的仅显示文本框的方法。

在下面的示例中,请参阅相关行的“# Create canvas”和“# Create labels”注释。

from tkinter import *

# Set globals, constants -------------------------------------------------------------
BG_COLOR = "#375362"
FG_COLOR = "white"
FONT = ("Arial", 20, "italic")
PADDING = 20
QBOX_HEIGHT = 250
QBOX_WIDTH = 300


# Create UI for Quizzler game --------------------------------------------------------
class QuizUI:
    def __init__(self):
        # Create window
        self.window = Tk()
        self.window.title("Quizzler")
        self.window.config(padx=PADDING, pady=PADDING, bg=BG_COLOR)

        # Create canvas
        self.qbox_canvas = Canvas(width=QBOX_WIDTH, height=QBOX_HEIGHT)
        self.qbox_canvas.grid(row=1, column=0, columnspan=2, padx=PADDING, pady=PADDING)

        # Create labels
        self.score_label = Label(text="Score: 0", bg=BG_COLOR, fg=FG_COLOR, font=FONT)
        self.score_label.grid(row=0, column=1, padx=PADDING, pady=PADDING)
        self.question_label = self.qbox_canvas.create_text(QBOX_WIDTH / 2, QBOX_HEIGHT / 2, text="PLACEHOLDER", font=FONT)

        # Run window loop
        self.window.mainloop()

预期:只需使用标签。画布似乎没有必要。 实际:讲师推荐的Canvas。

python tkinter tkinter-canvas tkinter-label
2个回答
2
投票

答案听起来很老套,但是当您需要 Canvas 提供的功能时,请使用 Canvas。如果您仅显示文本和/或单个图像,则没有理由使用画布。如果您需要显示多个图像,或者需要绘制几何形状,那么您应该使用 Canvas。

如果您要显示多个文本项并希望能够滚动,那么画布会更有用。框架内的标签不可滚动。


1
投票

标签是在 Tkinter 应用程序中显示静态文本的便捷工具,但它们确实有一定的局限性。首先,标签的自定义选项受到一定限制,对字体、颜色和对齐等文本属性的控制有限。这可能会阻碍创建视觉丰富的界面,特别是在需要更复杂设计的情况下。此外,在布局中定位标签可能具有挑战性,因为它们依赖于网格或包几何管理器,与使用画布相比,很难实现精确的对齐或定位。此外,标签缺乏对交互性的固有支持,例如响应鼠标单击或悬停事件等用户操作,限制了它们在创建动态用户界面中的有用性。此外,标签主要侧重于文本显示,缺乏与形状或图像等其他图形元素的集成,这可能会限制创建更复杂和更具视觉吸引力的界面。在某些涉及大量标签或复杂布局的情况下,性能可能会受到不利影响,因为标签可能无法提供与 Canvas 相同级别的性能优化。总的来说,虽然标签适合基本的文本显示,但它们在定制、定位、交互性、与图形集成和性能方面的局限性可能使它们不太适合更高级的图形用户界面。

© www.soinside.com 2019 - 2024. All rights reserved.