2016-11-14 5 views
1

Я пытаюсь использовать полосу прокрутки с моим проектом. У меня есть код, который создает рамку внутри холста в рамке, чтобы помещать метки в рамку, а затем прокручиваться. Это часть кода:place_configure() missing 1 обязательный позиционный аргумент: 'self'

statWindow = Tk() 
statWindow.title("View Statistics") 
statWindow.config(bg = "grey") 
statWindow.geometry('600x700') 

myframe =Frame(statWindow, relief=GROOVE, width=550, height=400, bd=1) 
myframe.place(x=20, y=90) 

canvas = Canvas(myframe) 
frame = Frame(canvas) 
myscrollbar = Scrollbar(myframe, orient="vertical", command=canvas.yview) 
canvas.configure(width=530, height=400, yscrollcommand=myscrollbar.set) 

myscrollbar.pack(side="right", fill="y") 
canvas.pack(side="left") 
canvas.create_window((0, 0), window=frame, anchor='nw') 
frame.bind("<Configure>", myfunction) 

def myfunction(event): 
    global canvas 
    canvas.configure(scrollregion=canvas.bbox("all"),width=530,height=400) 

Я тогда код:

Label(frame,text="hello", height=1, width=14, bg="white").grid(row=1, column=1) 

Это прекрасно работает, однако мне действительно нужно использовать .Поместить() Allthough, когда я изменить код метки до:

Label(frame,text="hello", height=1, width=14, bg="white").place(x=10, y=10) 

Ничего не происходит, так как на этикетке нет ярлыка, и никаких ошибок не возникает. Однако, когда я изменить код:

Label(frame,text="hello", height=1, width=14, bg="white") 
Label.place(x=10, y=10) 

Я получаю ошибку:

TypeError: place_configure() missing 1 required positional argument: 'self' 

Почему я не могу поставить метку в рамку, и как я могу исправить эту проблему? Thanks

ответ

-1

Вы должны позвонить place по классу (Label). Если вы хотите сделать это таким образом, вы должны назначить экземпляр Label некоторой переменной, а затем вызвать place на эту переменную. Он работает в первом случае, потому что вы вызываете place на экземпляр класса, а не на сам класс. Пример того, как это должно быть сделано:

label_name = Label(frame,text="hello", height=1, width=14, bg="white") 
label_name.place(x=10, y=10) 
+0

они не называют 'место' на классе. Они называют это экземпляром. –

+0

'Label.place (x = 10, y = 10)' это конечно похоже на вызов его в классе. Это: «Ярлык (рамка, текст =« привет », высота = 1, ширина = 14, bg =« белый »). Place (x = 10, y = 10)' с другой стороны вызывает его в экземпляре, который работает как ожидалось. – Fejs

+0

ОК, вы правы. Мои извинения. В одном месте они делают это неправильно, в одном месте они делают все правильно. Это отвечает на вопрос в названии. –