当前位置: 首页 > 面试题库 >

如何在tkinter画布上创建按钮?

海叶秋
2023-03-14
问题内容

我创建了一个框架,然后创建了一个画布。
接下来,我要在画布上添加一个按钮。
但是,当我打包按钮时,我看不到画布!

这是我尝试过的:

from Tkinter import Tk, Canvas, Frame, Button
from Tkinter import BOTH, W, NW, SUNKEN, TOP, X, FLAT, LEFT

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

    def initUI(self):
        self.parent.title("Layout Test")
        self.config(bg = '#F0F0F0')
        self.pack(fill = BOTH, expand = 1)
                #create canvas
        canvas1 = Canvas(self, relief = FLAT, background = "#D2D2D2",
                                            width = 180, height = 500)
        canvas1.pack(side = TOP, anchor = NW, padx = 10, pady = 10)
        #add quit button
        button1 = Button(canvas1, text = "Quit", command = self.quit,
                                                            anchor = W)
        button1.configure(width = 10, activebackground = "#33B5E5",
                                                        relief = FLAT)
        button1.pack(side = TOP)

def main():
    root = Tk()
    root.geometry('800x600+10+50')
    app = Example(root)
    app.mainloop()

if __name__ == '__main__':
    main()

问题答案:

Tkinterpack管理器会尝试将父窗口小部件的大小调整为正确的大小,以包含其子窗口小部件,并且默认情况下不会更大。画布就在其中-
但它与按钮的尺寸完全相同,因此是不可见的。

如果要在画布上放置小部件 而不 导致画布动态调整大小,则需要以下Canvas.create_window()功能

# ... snip ...
button1 = Button(self, text = "Quit", command = self.quit, anchor = W)
button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT)
button1_window = canvas1.create_window(10, 10, anchor=NW, window=button1)

这将在(10, 10)相对于画布的左上角创建您的按钮,而无需调整画布本身的大小。

请注意,您可以将window参数替换为对任何其他Tkinter小部件的引用。需要注意的是:命名的小部件必须是包含画布的顶级窗口的子级,或者是位于同一顶级窗口中的某些小部件的子级。



 类似资料:
  • 创建一个Canvas画布,用于显示WebGL的渲染结果,canvas元素和div等元素一样是HTML的一个元素,只是Canvas画布具有2D和3D绘图功能。 <!--canvas标签创建一个宽高均为500像素,背景为蓝色的矩形画布--> <canvas id="webgl" width="500" height="500" style="background-color: blue"></canv

  • 5.2.2 创建画布 为了绘图,首先要有画布。Tkinter 中提供了画布(Canvas),可以在画布上绘制图形、 文本,也可以在上面放置命令按钮等 GUI 构件。画布实际上是一个 Canvas 对象,它包含 一些属性(如画布的高度、宽度、背景色等),也包含一些方法(如在画布上创建图形、删 除或移动图形等)。 创建画布对象的语句模板如下: c = Canvas(<窗口>,<选项 1>=<值 1>,

  • 在画布中,为了让LTI应用程序进行身份验证,站点管理员必须输入远程站点的JWK。JWK的格式定义明确: 首先,我们可以使用像openssl这样的工具,创建一个密钥,并从中生成JWK吗?目前,我们正在使用jose4j编写代码来实现这一点,但还不清楚这是否必要。 其次,Canvas需要一些可选字段,如kid、alg和use。我们猜测use应该是“sig”,我们编造了kid:“1”,猜测alg:“RS2

  • 问题内容: 我发现了很多类似的问题,但并没有解决此问题的方法:我想 从磁盘加载图像文件 裁剪(是否懒惰) 将其放在TKinter画布上 而且,最好不要将步骤1设为gif文件,但是即使必须这样做,我也会很高兴。而已.. 我可以加载文件,可以裁剪文件(在PIL中),也可以将其放置在画布上(在TKinter中),但是我似乎无法将所有内容组合在一起。(因此,从PIL到TKinter的简单转换是够吗?)我当

  • 问题内容: 我需要使tkinter矩形透明。有谁知道这是怎么做到的吗? 我尝试指定,并尝试在颜色代码的末尾添加两个数字。这些东西似乎都不起作用,我找不到正确的语法。 这段代码给了我这个信息:,所以显然这不是正确的方法。 问题答案: 您可以使用透明图像来模拟结果。使用创建透明的图像,然后用画它。下面是一个示例代码:

  • 这是一个非常基本的程序,我想用它来制作两个移动的球,但实际上只有一个在移动。 我也尝试过一些变化,但无法让第二个球移动;另一个相关问题-一些人使用方法来实现这一点,而其他人则执行然后重新绘制。我应该使用哪一个?为什么? 这是我的代码,它只设置/移动一个球的动画: