【问题标题】:Turtle circle shape in a main GUI TK主 GUI TK 中的乌龟圆形
【发布时间】:2021-03-11 01:56:17
【问题描述】:

首先,感谢您访问我的帖子。我是一名业余 Python 作家。现在,我正在编写一个控制一些安捷伦仪器的代码,在我的 GUI 中我需要显示一个虚拟 LED,它可以向操作员显示当前的测试进度状态,例如,黄色 = 测试,绿色 = 通过,红色 =失败了。

我发现turtle模块可以通过添加turtle.shape('cicle')轻松创建一个圆,请看下面我的一个turtle代码:

我想说清楚,下面的代码不是我写的,我在这个网页里找到了代码。

    from turtle import Screen, Turtle

    CURSOR_SIZE = 30

    def blink():
        pen, fill = turtle.color()
        turtle.color(fill, pen)
        screen.ontimer(blink, 500)  # 1/4 second blink

    screen = Screen()

    turtle = Turtle()
    turtle.hideturtle()
    turtle.shape('circle')
    turtle.shapesize(50 / CURSOR_SIZE)
    turtle.color('red', 'Yellow')
    turtle.showturtle()

    blink()

所以,我想把按钮放到我的 GUI 主窗口中:

    ########## Main Window Design##########
    main = Tk()
    main.geometry('860x500+65+0')
    main.title('Firmware Upgrade System 1.0')
    Label(main,text='Firmware Upgrade System 1.0', font=("Tahoma", 20)).place(x=0,y=0)


    ##! UUT 1 ####################################
    LabelFrame(main, text=' UUT 1 INFORMATION : ', font=("Tahoma", 10), height=120, width=420, bd=2, relief='groove' ).place(x=10,y=40)
    LabelFrame(main, text='Serial Number',font=("Tahoma", 10), height=47, width=110, bd=3, relief='ridge').place(x=13,y=60)
    LabelFrame(main, text='Firmware Version',font=("Tahoma", 10), height=47, width=119, bd=3, relief='ridge').place(x=126,y=60)

    def fw_upgrade():
        print("pas")
        blink()

    #######Buttons and Functions
    Button(main, text="FIRMWARE UPGRADE", font=("Tahoma", 12), height=1, width=20, command=fw_upgrade).place(x=450,y=440)

所以,每次我执行代码时,它都会打开一个带有虚拟 LED 的辅助窗口。如何合并到我的主 GUI 中?

感谢您的帮助...

【问题讨论】:

    标签: python-3.x tkinter turtle-graphics python-turtle


    【解决方案1】:

    常规的TurtleScreen 总是创建一个新窗口。

    turtle 模块还有另一个 RawTurtle 类,其工作方式与 Turtle 完全相同,但利用了您必须提供的现有 tk.Canvasturtle.TurtleScreenturtle.Screen 实例。 Take a look at the turtle docs, they have lots of examples too

    您还应该在代码末尾的Tk() 窗口上调用mainloop(),以使窗口保持打开状态。 (如果您以后可能会更改它们的任何属性或文本,那么将 LabelFrames 和所有小部件的实例存储在变量中也是一个好主意)

    from tkinter import Tk, Label, LabelFrame, Button, Canvas
    from turtle import TurtleScreen, RawTurtle
    
    def fw_upgrade():
        print("pas")
    
    ########## Main Window Design##########
    main = Tk()
    main.geometry('860x500+65+0')
    main.title('Firmware Upgrade System 1.0')
    label1 = Label(main,text='Firmware Upgrade System 1.0', font=("Tahoma", 20))
    label1.place(x=0,y=0)
    ##! UUT 1 ####################################
    frame1 = LabelFrame(main, text=' UUT 1 INFORMATION : ', font=("Tahoma", 10), height=120, width=420, bd=2, relief='groove' )
    frame1.place(x=10,y=40)
    frame2 = LabelFrame(main, text='Serial Number',font=("Tahoma", 10), height=47, width=110, bd=3, relief='ridge')
    frame2.place(x=13,y=60)
    frame3 = LabelFrame(main, text='Firmware Version',font=("Tahoma", 10), height=47, width=119, bd=3, relief='ridge')
    frame3.place(x=126,y=60)
    btn = Button(main, text="FIRMWARE UPGRADE", font=("Tahoma", 12), height=1, width=20, command=fw_upgrade)
    btn.place(x=450,y=440)
    
    canv = Canvas(main)
    turtlescr = TurtleScreen(canv)
    canv.place(x=0, y=100)
    
    CURSOR_SIZE = 30
    turtle = RawTurtle(turtlescr)
    turtle.hideturtle()
    turtle.shape('circle')
    turtle.shapesize(50 / CURSOR_SIZE)
    turtle.color('red', 'Yellow')
    turtle.showturtle()
    
    main.mainloop()
    

    【讨论】:

    • 谢谢@gdcodes 你所描述的作品并将“圆圈”移动到我的GUI中,但是,Turtle生成的窗口挡住了我的GUI,我想做的是添加一个虚拟导致我可以在执行测试期间更改颜色。请参阅以下链接,这是美国国家仪器公司正在进行的测试图片,显示在测试执行期间 GRENN 虚拟 LED 闪烁forums.ni.com/t5/Example-Code/NI-TestStand-Featured-Examples/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2014-12-01
    • 2017-01-28
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多