精华内容
下载资源
问答
  • 今天继续带领大家阅读...要学会如何在turtle绘图窗口中添加画布,我们要先来了解turtle模块中的重要类_Root.class_Root(TK.Tk):"""RootclassforScreenbasedonTkinter."""def__init__(self):TK.Tk.__init__(self)def...

    今天继续带领大家阅读海龟库源码。今天来

    介绍一下如何在turtle绘图窗口中添加任意多的画布。

    要学会如何在turtle绘图窗口中添加画布,我们要先来了解turtle模块中的重要类_Root.

    class _Root(TK.Tk):

    """Root class for Screen based on Tkinter."""

    def __init__(self):

    TK.Tk.__init__(self)

    def setupcanvas(self, width, height, cwidth, cheight):

    self._canvas = ScrolledCanvas(self, width, height, cwidth, cheight)

    self._canvas.pack(expand=1, fill="both")

    def _getcanvas(self):

    return self._canvas

    def set_geometry(self, width, height, startx, starty):

    self.geometry("%dx%d%+d%+d"%(width, height, startx, starty))

    def ondestroy(self, destroy):

    self.wm_protocol("WM_DELETE_WINDOW", destroy)

    def win_width(self):

    return self.winfo_screenwidth()

    def win_height(self):

    return self.winfo_screenheight()

    该类继承于tkinter库的TK类,它代表的是turtle绘图的根窗口,当我们运行以下代码。

    import turtle

    r = turtle._Root()

    r.mainloop()

    就会弹出一个tk窗口。

    海龟绘图根窗口--tk窗口

    目前我们的窗口上空空如也,啥都没有?要让海龟绘图首先应该有画布,所以,接下来,我们现在上面放置一个画布。

    import turtle

    r = turtle._Root()

    r.setupcanvas(800,800,600,600)

    r.mainloop()

    这样就会在tk窗口中添加一个高600,宽600的画布。

    海龟绘图根窗口--带画布

    接下来,我们在此窗口中再添加一个画布。

    import turtle

    r = turtle._Root()

    r.set_geometry(800,800,0,0)

    # 放第一个画布

    cv2 = turtle.ScrolledCanvas(r)

    cv2.pack(expand = True, fill = tk.BOTH)

    cv2.reset(400, 400)

    t1 = turtle.RawPen(cv2)

    t1.shape('turtle')

    t1.screen.bgcolor('pink')

    # 放第二个画布

    cv3 = turtle.ScrolledCanvas(r)

    cv3.pack(expand = True, fill = tk.BOTH)

    cv3.reset(400, 400)

    t2 = turtle.RawPen(cv3)

    t2.shape('turtle')

    t2.screen.bgcolor('gray')

    r.mainloop()

    于是,窗口中就出现了两个背景颜色不同的画布。同样的道理,你可以向绘图窗口中添加任意多的画布。

    海龟绘图根窗口--带两个画布

    引入了两个线程后,可以让海龟协同工作,绘制图形。

    import turtle

    r = turtle._Root()

    r.set_geometry(800, 800, 0, 0)

    cv2 = turtle.ScrolledCanvas(r)

    cv2.pack(expand=True, fill=tk.BOTH)

    t1 = turtle.RawPen(cv2)

    t1.shape('turtle')

    t1.screen.bgcolor('pink')

    # 放第二个画布

    cv3 = turtle.ScrolledCanvas(r)

    cv3.pack(expand=True, fill=tk.BOTH)

    t2 = turtle.RawPen(cv3)

    t2.shape('turtle')

    t2.screen.bgcolor('gray')

    th1 = Thread(target = draw_spiral_loop, args = (t1, 1))

    th2 = Thread(target=draw_spiral_loop1, args=(t2, 2))

    th1.start()

    th2.start()

    r.mainloop()

    我们一起来看一下启动后的效果吧!

    总结一下,本篇文章中,我们介绍了如何在turtle绘图窗口中添加多个画布Canvas,那么,对于tkinter的其他组件例如:按钮、标签、下拉列表、单选框与复选框等等该如何添加至

    turtle绘图窗口呢?我们下一篇文章继续聊!再会!

    由于篇幅所限,本篇文章中的完整代码并未全部公布,若要索取完整程序代码,畅谈合作与Python技术交流、咨询“在线课程”,请扫描以下二维码,进群后与我们联系!

    最后打个广告

    。我们 "Python青少年编程班" 计划近期新开一期在线学习班,从零基础讲起,基础部分预计40次课授完,课程采用直播授课的方式,每节课授课时间1个半小时,费用优惠,具体学习内容如下:

    若您有意参加,请扫描以上二维码与我们联系。

    -end-

    Python 青少年编程

    编程班学生作品展示系列:

    Python数据教学案例与公益课:

    Python微课堂系列:

    展开全文
  • 下面是一个在tkinter级别操作滚动以获得所需行为的...和{}之间的代码来自于我之前回答的一个SO问题,它是为了创建一个有趣的分形景观来探索:from turtle import Turtle, Screenfrom random import randomMAGNIFI...

    下面是一个在tkinter级别操作滚动以获得所需行为的示例。在本例中,我保持海龟静止在屏幕中央,但使用箭头键移动其下方的景观。在

    ### Generate a landscape ...和{}之间的代码来自于我之前回答的一个SO问题,它是为了创建一个有趣的分形景观来探索:from turtle import Turtle, Screen

    from random import random

    MAGNIFICATION = 10

    def move_left():

    canvas.xview_scroll(-1, "units")

    turtle.setx(turtle.xcor() - MAGNIFICATION)

    def move_right():

    canvas.xview_scroll(1, "units")

    turtle.setx(turtle.xcor() + MAGNIFICATION)

    def move_up():

    canvas.yview_scroll(-1, "units")

    turtle.sety(turtle.ycor() + MAGNIFICATION)

    def move_down():

    canvas.yview_scroll(1, "units")

    turtle.sety(turtle.ycor() - MAGNIFICATION)

    screen = Screen()

    width, height = screen.screensize()

    screen.screensize(width * MAGNIFICATION, height * MAGNIFICATION)

    canvas = screen.getcanvas()

    canvas.config(xscrollincrement=str(MAGNIFICATION))

    canvas.config(yscrollincrement=str(MAGNIFICATION))

    # turtle initialization

    turtle = Turtle("turtle", visible=False)

    turtle.width(MAGNIFICATION)

    turtle.resizemode('auto')

    ### Generate a landscape to explore

    screen.tracer(False)

    RULES = {'x':'x+yf+', 'y':'-fx-y', 'f':'f', '+':'+', '-':'-'}

    sub_string = string = "fx"

    LEVEL = 13

    for _ in range(LEVEL):

    turtle.pencolor(random(), random(), random())

    for character in sub_string:

    if character == '+':

    turtle.right(90)

    elif character == '-':

    turtle.left(90)

    elif character == 'f':

    turtle.forward(5 * MAGNIFICATION)

    screen.update()

    full_string = "".join(RULES[character] for character in string)

    sub_string = full_string[len(string):]

    string = full_string

    screen.tracer(True)

    ### Finished generating a landscape to explore

    turtle.penup()

    turtle.home()

    turtle.setheading(90)

    turtle.color('dark green', 'light green')

    turtle.showturtle()

    screen.onkey(move_left, "Left")

    screen.onkey(move_right, "Right")

    screen.onkey(move_up, "Up")

    screen.onkey(move_down, "Down")

    screen.listen()

    screen.mainloop()

    滚动条反映了整个空间的移动。不幸的是,滚动条仍然是活动的,并且会使东西倾斜(使用箭头键代替),它需要在景观边缘附近工作,但这只是一个例子,表明如果你花时间探索tkinter/Tk基础,几乎任何事情都是可能的。在

    afd7164c1783471eae5b4851a2422d88.png

    展开全文
  • 我在用Python龟画叙利亚国旗。我暂时撇开了这两颗绿星,...代码如下:from turtle import *# Set up the drawing environmentlength = 600height = 400setup(length, height)setworldcoordinates(0,0,length,heig...

    我在用Python龟画叙利亚国旗。我暂时撇开了这两颗绿星,因为它们需要外部依赖(哦,这对一个偶然的政治双关语来说如何?哈哈)。代码如下:from turtle import *

    # Set up the drawing environment

    length = 600

    height = 400

    setup(length, height)

    setworldcoordinates(0,0,length,height)

    goto(0,0)

    colours = ["red","black","white","Darkgreen"]

    bgcolor(colours[0])

    speed('fastest')

    ## Black Stripe ##

    pencolor(colours[1])

    pendown()

    fillcolor(colours[1])

    begin_fill()

    goto(length,0)

    goto(length,height/3)

    goto(0,height/3)

    goto(0,0)

    end_fill()

    penup()

    # White Stripe

    goto(0,height/3)

    pencolor(colours[2])

    pendown()

    fillcolor(colours[2])

    begin_fill()

    goto(length,height/3)

    goto(length,(height/3)*2)

    goto(0,(height/3)*2)

    goto(0,height/3)

    end_fill()

    penup()

    ht()

    done()

    为什么图像周围有红色边框?我已经将画布大小和坐标系设置为相等,因此1像素等于1像素。例如,黑框应该从画布的左下角开始,就像我告诉它的那样,但是它的位置是一个红色的边框。如果您在运行代码后手动调整窗口大小,无论您在试图重叠红色边框时使其变得多么小,始终会有一个红色边框。我甚至没有在代码中写上边界。在

    我想这可能和Python turtle的内脏有关,它只允许一个小边界,以便查看坐标(0,0)上的内容,但我找不到任何文档来实际显示turtle是如何工作的,它们都只是说“setup(x,y) =set canvas size“或bgcolor(“在此处输入颜色”),并且不解释构成函数的任何定义。在

    有人知道如何:移除边框?在

    使窗口大小等于画布大小,从而覆盖红色边框?在

    干杯!在

    (编辑:顺便说一下,screensize(length,height)给了我红色的边框和滚动条。)

    展开全文
  • I want to convert a Python Turtle module (tkinter) canvas into a bitmap. I have followed the suggestion at "How to convert a Python tkinter canvas postscript file to an image file readable by the PIL....

    I want to convert a Python Turtle module (tkinter) canvas into a bitmap. I have followed the suggestion at "How to convert a Python tkinter canvas postscript file to an image file readable by the PIL?" to convert it first to postscript; then I open it as a PIL image, then save that as a bitmap. But the bitmap is a different size from the original canvas.

    import turtle

    import io

    from PIL import Image

    myttl = turtle.Turtle()

    wd=500

    ht=500

    turtle.setup(width=wd, height=ht, startx=0, starty=0)

    turtle.mode('logo') # start pointing north

    myttl.forward(100)

    screen = turtle.Screen()

    cv = screen.getcanvas()

    ps = cv.postscript(colormode='mono')

    img = Image.open(io.BytesIO(ps.encode('utf-8'))).convert(mode='1')

    img.save('test.bmp')

    In the above code, the canvas is 500x500. But the file test.bmp is shrunk to 374x374, and its image is smaller than the on-screen turtle graphic. How can I get an unshrunk 500x500 bitmap?

    解决方案

    If we start by analyzing the postscript contents, we see that it does a scaling by 0.7498 to the dimensions of your canvas

    %%Page: 1 1

    save

    306.0 396.0 translate

    0.7498 0.7498 scale

    3 -241 translate

    -244 483 moveto 239 483 lineto 239 0 lineto -244 0 lineto closepath clip newpath

    gsave

    grestore

    gsave

    0 239 moveto

    0 339 lineto

    1 setlinecap

    1 setlinejoin

    1 setlinewidth

    [] 0 setdash

    0.000 0.000 0.000 setrgbcolor AdjustColor

    stroke

    grestore

    gsave

    grestore

    gsave

    0 339 moveto

    -5 330 lineto

    0 332 lineto

    5 330 lineto

    0 339 lineto

    0.000 0.000 0.000 setrgbcolor AdjustColor

    eofill

    0 339 moveto

    -5 330 lineto

    0 332 lineto

    5 330 lineto

    0 339 lineto

    1 setlinejoin 1 setlinecap

    1 setlinewidth

    [] 0 setdash

    0.000 0.000 0.000 setrgbcolor AdjustColor

    stroke

    grestore

    restore showpage

    After some digging done on postscript I came across a perl/Tk reference guide on postscript conversion from tkinter's canvas here

    What you actually can do is to set not only colormode but also pagewidth/pageheight. This resulted in the following line being changed from

    ps = cv.postscript(colormode='mono')

    to

    ps = cv.postscript(colormode='mono', pagewidth=wd-1, pageheight=ht-1)

    Result:

    If you have any questions feel free to leave a comment and I will try my best to reply!

    PS:

    Don't ask me about the -1 part, it wouldn't give me anything other that 501x501 pixels so I compensated for that. I do not know why it still didn't work though.

    展开全文
  • 《Python真好玩,教孩子学编程》收到问题:turtle.screensize设置大小,窗口没有变化???解答:用screensize设置的是画布大小及背景色,窗体和画布不是一个概念。如果画布大于窗体,窗体会出现滚动条,如果画布...
  • 为了测量一根杆的转速,我需要做一个刻度盘,刻度盘上有大量交替排列的暗/透明段。...但如果我做turtle.setup(x,y)的x或y大于屏幕,画布将被截断以适合屏幕。如何避免?我的代码包含在最后。这里有一个...
  • import turtleimport tkinter as tkdef forward():t.forward(100)def back():t.back(100)def left():t.left(90)def right():t.right(90)root = tk.Tk()canvas = tk.Canvas(master = root, width = 500, height = 500...
  • 在进入正文之前,我想先回顾上一篇博客中提到的一个知识点:有关画布中默认原点,不知道大家有没有留意过,即在IDLE中输入以下代码,就会得到如下图中的原点: >>> import turtle >>> turtle.dot(10,‘red’) >>> ...
  • 在用python自带的IDLE中,turtle运行后的画布是可以停留的,而PyCharm中一闪而过。 解决方案 代码后面加上如下即可悬停: import turtle turtle.setup(800, 800) # pycharm需要加的内容 turtle.done() ...
  • turtle绘画,设置画布的背景图片

    千次阅读 2020-02-13 19:00:15
    python使用turtle绘画时,设置画布颜色很容易,但是要将图片设置为画布的背景,则需要以下操作。 如下列代码即可设置画布背景。 def bgpic(self, picname=None): """Set background image or return name of ...
  • turtle

    2019-09-12 09:47:08
    turtle库是Python中一个很流行的绘图函数库,主要是依据坐标轴来绘制...turtle中的画布就是用于绘画的区域,我们可以设置它的大小和初始位置。 常用的画布方法: screensize()方法 语法:turtle.screensize(canv...
  • 我正在尝试保存tkinter画布的当前状态,以便以后显示。这是我尝试使用的方法deepcopy:fromtkinterimport*fromcopyimportdeepcopyroot=Tk()cv=Canvas(root)cv.pack()cvcopy=deepcopy(cv)mainloop()但是,该行cvcopy=...
  • 其中一个窗口太大了,所以必须实现一个滚动条,这必须用画布来完成。这导致了一个问题,即画布永远不会位于窗口的中间,而窗口的大小会自动与显示的大小相同。在如何将画布居中(和顶部)并使滚动条保持在右侧?我知道...
  • 简介:Turtle是Python语言中一个很流行的简单的绘图工具。你可以把它理解为一个小海龟,只听得懂有限的指令... 画布(canvas)画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。设置画布大小t...
  • 【python之tkinter画布turtle绘图的基础知识: turtle.screensize(canvwidth=None, canvheight=None, bg=None) #参数分别为画布的宽(单位像素), 高, 背景颜色 turtle.screensize(800,600, "green") ...
  • turtle 绘画 结束后画布不自动关闭

    千次阅读 2020-09-27 14:33:35
    在pycharm里面用turtle画图,当图形画完之后界面就立刻消失,对于这种情况有以下三种解决方案 在程序的最后面加上:turtle.exitonclick() 这种方法当用户点击界面之后就会退出 在程序的最后面加上:turtle.mainloop...
  • 今天的这一篇博客同样也是关于turtle库,话不多说,直接进入今天的主题。 进入正文:1.回顾上文:在进入正文之前,我想先回顾上一篇博客中提到的一个知识点:有关画布中默认原点,不知道大家有没有留意过,即在IDLE...
  • Python之Turtle绘图工具

    2018-08-27 14:36:56
    Turtle画布(canvas)是绘图区域,可设置大小和初始位置。默认有一个坐标原点为画布中心的坐标轴(0,0),默认"standard"模式坐标原点上有一只面朝x轴正方向小乌龟。设置画布大小可使用screensize和setup方法 ...
  • 【python之tkinter画布turtle绘图的基础知识:turtle.screensize(canvwidth=None, canvheight=None, bg=None)#参数分别为画布的宽(单位像素), 高, 背景颜色turtle.screensize(800,600, "green")turtle.screensize()...
  • Python : Turtle库--2.1 画布(canvas)

    千次阅读 2019-06-29 20:38:59
    画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置。 常用的画布方法有两个:screensize()和setup()。 (1)turtle.screensize(canvwidth=None, canvheight=None, bg=None) 参数分别为画布的宽...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 802
精华内容 320
关键字:

turtle画布