Python 3.x 如何使函数在画布(tkinter 3.x)中正确绘制线条

Python 3.x 如何使函数在画布(tkinter 3.x)中正确绘制线条,python-3.x,tkinter,tkinter-canvas,Python 3.x,Tkinter,Tkinter Canvas,我正在制作一个画线的程序(你用滑块/刻度决定行距和终点),问题是当我按下psy按钮(错误下面的代码)时,我得到了这些错误(我希望我能理解): 无论如何,代码: import os import sys from tkinter import * root = Tk() app=Frame(root) root.geometry("1200x1200") ar1 = Scale(root,from_=0,to=600) ar2= Scale(app,from_=0,to=600,deafultv

我正在制作一个画线的程序(你用滑块/刻度决定行距和终点),问题是当我按下psy按钮(错误下面的代码)时,我得到了这些错误(我希望我能理解):

无论如何,代码:

import os
import sys
from tkinter import *
root = Tk()
app=Frame(root)

root.geometry("1200x1200")
ar1 = Scale(root,from_=0,to=600)
ar2= Scale(app,from_=0,to=600,deafultvar=0)#app instead of root because the button for unknown to me reason 
#wouldn't appear in GUI otherwise
br1= Scale(root,from_=0,to=600)
br2= Scale(root,from_=0,to=600)





cans = Canvas(root,width = 500,height = 500)

cans.create_line(600,50,0,50) #This has nothing to do with the actual program by my understanding


def creat():
    cans.create_line(ar1,ar2,br1,br2)#< this is what causes the problem i don't understand 


psy=Button(root,command=creat,text="karole")
psy.pack()
cans.pack()
ar1.pack()
ar2.pack()
br1.pack()
br2.pack()

mainloop()
导入操作系统
导入系统
从tkinter进口*
root=Tk()
app=帧(根)
根几何(“1200x1200”)
ar1=标度(根,从0到600)
ar2=标度(app,从0到600,deafultvar=0)#app而不是root,因为我不知道按钮的原因
#否则就不会出现在GUI中
br1=刻度(根,从0到600)
br2=刻度(根,从0到600)
罐头=帆布(根,宽=500,高=500)
cans.create_line(600,50,0,50)#据我所知,这与实际程序无关
def create():
cans.create_line(ar1,ar2,br1,br2)#<这就是导致问题的原因,我不明白
psy=按钮(root,command=creat,text=“karole”)
psy.pack()
罐装
ar1.pack()
ar2.pack()
br1.pack()
br2.pack()
mainloop()
另外,如果有帮助的话,我使用py345

罐头。创建线(x0,y0,…)将偶数个整数坐标作为位置参数。您传递了小部件,这些小部件被转换为它们的字符串标识符。在
“.14855536.14855504”
中,
.
表示根,
'14855536'
是画布,
'14855504'
是刻度
ar1
。相反,您需要在标尺上使用
.get()
方法来获取它们的整数值。下面的工作

from tkinter import *
root = Tk()

root.geometry("1200x1200")
ar1 = Scale(root,from_=0,to=600)
ar2= Scale(root,from_=0, to=600)
br1= Scale(root,from_=0, to=600)
br2= Scale(root,from_=0, to=600)

cans = Canvas(root, width=500, height=500)

def creat():
    cans.create_line(ar1.get(), ar2.get(), br1.get(), br2.get())
psy=Button(root, command=creat, text="karole")
ar1.pack()
ar2.pack()
br1.pack()
br2.pack()
psy.pack()
cans.pack()

root.mainloop()
其他两个修复:defaultvar的
选项无效并导致错误
mainloop()
而不是
root。mainloop()
导致tk创建第二个
tk
对象,这是个坏主意


编辑:添加了可以工作的代码。

非常感谢,我认为mainloop()可以工作,我认为ar1、ar2,。。。将被存储为整数。我感谢你的帮助。
from tkinter import *
root = Tk()

root.geometry("1200x1200")
ar1 = Scale(root,from_=0,to=600)
ar2= Scale(root,from_=0, to=600)
br1= Scale(root,from_=0, to=600)
br2= Scale(root,from_=0, to=600)

cans = Canvas(root, width=500, height=500)

def creat():
    cans.create_line(ar1.get(), ar2.get(), br1.get(), br2.get())
psy=Button(root, command=creat, text="karole")
ar1.pack()
ar2.pack()
br1.pack()
br2.pack()
psy.pack()
cans.pack()

root.mainloop()