如何组合 Tkinter 窗口? [英] How to Combine Tkinter windows?

查看:64
本文介绍了如何组合 Tkinter 窗口?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两组代码,第一部分是海龟图形窗口,第二部分是 Tkinter 窗口.我应该如何将这两个部分放在一个窗口中?

I have two groups of codes and the first part is a turtle graphics window and second part is a Tkinter window. How should I those two parts together to one window?

我的第一部分代码

from turtle import *

def move(thing, distance):
    thing.circle(250, distance)

def main():
    rocket = Turtle()
    ISS = Turtle()
    bgpic('space.gif')
    register_shape("ISSicon.gif")
    ISS.shape("ISSicon.gif")

    rocket.speed(10)
    ISS.speed(10)
    counter = 1
    title("ISS")
    screensize(750, 750)
    ISS.hideturtle()
    rocket.hideturtle()
    ISS.penup()
    ISS.left(90)
    ISS.fd(250)
    ISS.left(90)
    ISS.showturtle()
    ISS.pendown()
    rocket.penup()
    rocket.fd(250)
    rocket.left(90)
    rocket.showturtle()
    rocket.pendown()
    rocket.fillcolor("white")

    while counter == 1:
        move(ISS, 3)
        move(rocket, 4)

main()

第二部分

from Tkinter import *

control=Tk()
control.title("Control")

control.geometry("200x550+100+50")
cline0=Label(text="").pack()
cline1=Label(text="Speed (km/s)").pack()

control.mainloop()

非常感谢;)

推荐答案

嗯,我不确定混合它们是否是个好主意.这个 turtle 模块经常使用来自 Tcl 的 update 命令,这很可能会在混合中添加更多涉及的代码时导致问题(很明显 乌龟可以忍受它).无论如何,混合两者的一种方法是使用 RawTurtle 代替 Turtle,这样您就可以传递自己的 Canvas 其中 turtle 将根据其需要进行调整.

Uhm, I'm not sure if mixing them is a good idea. This turtle module frequently uses the update command from Tcl, and this will very likely cause problems when more involved code is added in the mix (it is nice that apparently turtle can live with it). Anyway, one way to mix both is by using RawTurtle in place of Turtle, so you can pass your own Canvas which turtle will adjust for its needs.

这是一个例子(基本上我也用无限重新调度代替了无限循环):

Here is an example (I also replaced the infinite loop by an infinite re-schedule, basically):

import Tkinter
import turtle

def run_turtles(*args):
    for t, d in args:
        t.circle(250, d)
    root.after_idle(run_turtles, *args)

root = Tkinter.Tk()
root.withdraw()

frame = Tkinter.Frame(bg='black')
Tkinter.Label(frame, text=u'Hello', bg='grey', fg='white').pack(fill='x')
canvas = Tkinter.Canvas(frame, width=750, height=750)
canvas.pack()
frame.pack(fill='both', expand=True)

turtle1 = turtle.RawTurtle(canvas)
turtle2 = turtle.RawTurtle(canvas)

turtle1.ht(); turtle1.pu()
turtle1.left(90); turtle1.fd(250); turtle1.lt(90)
turtle1.st(); turtle1.pd()

turtle2.ht(); turtle2.pu()
turtle2.fd(250); turtle2.lt(90)
turtle2.st(); turtle2.pd()

root.deiconify()

run_turtles((turtle1, 3), (turtle2, 4))

root.mainloop()

这篇关于如何组合 Tkinter 窗口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆