2016-03-26 4 views
0

Ich mache ein Programm, das eine Linie zeichnet (Sie entscheiden, wo der Anfang und Ende davon mit den Schiebereglern/Skalen ist), Problem wird bekommen diese Fehler (die ich wünschte, ich verstanden), wenn ich die psy-Taste drücken (Code unterhalb der Fehler):Wie man Funktionen macht, die Linien in Canvas (tkinter 3.x) richtig zeichnen

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 

sowieso, der Code:

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

auch, wenn das hilft, im mit py345

Antwort

0

cans.c reate_line (x0, y0, ...) nimmt eine gerade Anzahl ganzzahliger Koordinaten als Positionsargumente. Sie haben Widgets übergeben, die in ihre Zeichenfolgenbezeichner umgewandelt wurden. In ".14855536.14855504", '.' repräsentiert root, '14855536' ist die Leinwand, und '14855504' ist die Skala ar1. Stattdessen müssen Sie die .get() Methode auf den Skalen verwenden, um ihre ganzzahligen Werte zu erhalten. Folgendes funktioniert.

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

Ein paar andere Korrekturen: die defaultvar Option nicht gültig ist und einen Fehler verursacht; mainloop() anstelle von root.mainloop() verursacht tk ein zweites Tk Objekt zu erstellen, was eine schlechte Idee ist.

EDIT: hinzugefügt den Code, der funktioniert.

+0

Vielen Dank, dachte Mainloop() würde funktionieren, und ich dachte, dass Ar1, Ar2, ... als Ganzzahlen gespeichert wurden. Ich schätze Ihre Hilfe. – Koteu

Verwandte Themen