2016-03-26 13 views
0

Bir çizgi çizen bir program yapıyorum (sürgü ve ölçek ile başlangıç ​​ve bitiş noktası olup olmadığına siz karar verirsiniz), sorunla karşılaşıyorum bu hatalar (i anlaşılan dilek o) i (hatalar aşağıda kodu) psy düğmesine bastığınız zaman:Tuval çizgilerini düzgün şekilde çizen işlevler nasıl yapılır (tkinter 3.x)

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\python351\lib\tkinter\__init__.py", line 1549, in __call__ 
    return self.func(*args) 
    File "C:/Users/Koteu/PycharmProjects/guji/fsd.py", line 23, in creat 
    cans.create_line(ar1,ar2,br1,br2) 
    File "C:\python351\lib\tkinter\__init__.py", line 2331, in create_line 
    return self._create('line', args, kw) 
    File "C:\python351\lib\tkinter\__init__.py", line 2319, in _create 
    *(args + self._options(cnf, kw)))) 
_tkinter.TclError: bad screen distance ".14855536.14855504" 

Process finished with exit code 0 

zaten, kod: ayrıca

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() 

eğer yardımcı olur, im py345 kullanarak

cevap

0

cans.c reate_line (x0, y0, ...), konumsal args olarak bir çift tamsayı koordinatını alır. Dize tanımlayıcılarına dönüştürülen widget'ları geçtiniz. ".14855536.14855504", '.', kökü temsil eder, '14855536' tuvaldir ve '14855504', ar1 ölçeğidir. Bunun yerine, tamsayı değerlerini almak için ölçeklerde .get() yöntemini kullanmanız gerekir. Aşağıdaki işler.

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() 

diğer düzeltmelerin bir çift: defaultvar seçeneği geçerli değil ve bir hataya neden; root.mainloop() yerine mainloop(), tk'nin ikinci bir Tk nesnesi oluşturmasına neden oldu; bu da kötü bir fikirdir.

DÜZENLEME: Çalışan kodu ekledi.

+0

Çok teşekkürler, mainloop() çalışacağını düşündüm ve ar1, ar2, ... nin tamsayı olarak saklandığını düşünmüştüm. Yardımın için minnettarım. – Koteu

İlgili konular