【问题标题】:Change turtle.home() location in the canvas在画布中更改 turtle.home() 位置
【发布时间】:2019-08-31 08:51:30
【问题描述】:

我正在使用turtle 和tkinter 制作一个类似于绘画的GUI。我正在制作一个按钮,使用turtle.home() 将光标带到屏幕中心,但TurtleScreen 的主页不在中心(它位于左上角的中间)

import tkinter as tk
import Pmw
from tkinter import ttk
from turtle import TurtleScreen, RawTurtle


class TestApp():
    def __init__(self, root):
        self.root = root
        self.create_screen_turtle()

    def create_screen_turtle(self):
        self.canvas_frame = ttk.Frame(self.root)
        self.canvas = Pmw.ScrolledCanvas(self.canvas_frame,
                                         borderframe=1,
                                         labelpos='n',
                                         label_text='Drawing Board',
                                         usehullsize=1,
                                         hull_width=700,
                                         hull_height=600,
                                         )
        self.screen = TurtleScreen(self.canvas.interior())
        self.yertle = RawTurtle(self.screen)
        self.canvas.pack(anchor=tk.CENTER, padx=5,
                         pady=5, fill='both', expand=1)
        self.canvas_frame.pack(side=tk.LEFT, padx=0,
                               pady=5, fill='both', expand=1)

        # Go to home
        self.yertle.home()


if __name__ == '__main__':

    root = tk.Tk()
    app = TestApp(root)
    root.geometry('1000x600')
    root.mainloop()

这是我如何在滚动窗口或其他东西中使用它的问题吗??

提前谢谢你

【问题讨论】:

    标签: python tkinter turtle-graphics


    【解决方案1】:

    这是由于您使用了 Pmw ——如果我们将它的 ScrolledCanvas 替换为 turtle 附带的那个,那么 yertle 按预期从中间开始:

    import tkinter as tk
    from turtle import TurtleScreen, RawTurtle, ScrolledCanvas
    
    class TestApp():
        def __init__(self, root):
            self.root = root
            self.create_screen_turtle()
    
        def create_screen_turtle(self):
            self.canvas_frame = tk.Frame(self.root)
            self.canvas = ScrolledCanvas(self.canvas_frame)
            self.screen = TurtleScreen(self.canvas)
            self.yertle = RawTurtle(self.screen)
    
            self.canvas.pack(anchor=tk.CENTER, padx=5, pady=5, fill=tk.BOTH, expand=tk.YES)
            self.canvas_frame.pack(side=tk.LEFT, padx=0, pady=5, fill=tk.BOTH, expand=tk.YES)
    
    if __name__ == '__main__':
    
        root = tk.Tk()
        app = TestApp(root)
        root.geometry('1000x600')
        root.mainloop()
    

    这似乎不是您提供给Pmw.ScrolledCanvas() 的参数。这似乎也不是由于使用ttk.Frame 而不是tk.Frame。如果我们将它们都删除并简单地做:

    self.canvas_frame = tk.Frame(self.root)
    self.canvas = ScrolledCanvas(self.canvas_frame)
    

    在您的原始代码中,问题仍然存在。也许它可以通过您提供的参数来解决。我会建议将screen.setworldcoordinates() 作为一种解决方法,但它似乎也不适用于Pmw.ScrolledCanvas

    【讨论】:

    • 我可以根据海龟风格和滚动条或边框颜色等自定义 ScrolledCanvas 吗??
    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2020-06-09
    • 2020-12-26
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多