如何组合 Tkinter 窗口? [英] How to Combine Tkinter windows?
问题描述
我有两组代码,第一部分是海龟图形窗口,第二部分是 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屋!