Wpis z mikrobloga

Cześć!

Natrafiłem na kolejną zagwozdkę przy robieniu kalkulatora w #python #tkinter . Praktycznie cała wizualna strona gotowa, jednak mam problem zaimplementować Scrollbar do widgetu Text. Korzystam z tego poradnika, ale wyskakuje błąd:

Traceback (most recent call last):
File "C:/Users/x/PycharmProjects/gui_calculator/calc.py", line 80, in
a = Calculator(root)
File "C:/Users/x/PycharmProjects/gui_calculator/calc.py", line 11, in __init__
self.scrollbarY = Scrollbar(master, orient=VERTICAL, command=self.score_area.yview).grid(
AttributeError: 'Calculator' object has no attribute 'score_area'

Całość kodu wygląda tak: https://pastebin.com/PyD6Yy5p

Gdzie jest błąd?
#programowanie #naukaprogramowania
  • 7
@Devih: wydaje się że próbujesz użyć self.score_area zanim został zdefiniowany.

self.scrollbarY = Scrollbar(master, orient=VERTICAL, command=**self.score_area.yview**).grid(
rowspan=5, column=8, sticky=N+S)

self.score_area = Text(master, width=40, height=10)
@misza_zg: Dobra znowu doszedłem co nie tak.
Miałem:

self.scrollbarY = Scrollbar(master, orient=VERTICAL, command=self.score_area_yview).grid(rowspan=5, column=8, sticky=N+S)
oraz

self.score_area['yscrollcommand'] = self.scrollbarY.set
więc .set się po .grid robiło i stąd błąd.

zmieniłem

self.scrollbarY = Scrollbar(master, orient=VERTICAL, command=self.score_area_yview).grid(rowspan=5, column=8, sticky=N+S)
na

self.scrollbarY = Scrollbar(master, orient=VERTICAL, command=self.score_area_yview)
self.scrollbarY.grid(rowspan=5, column=8, sticky=N+S)

i już spoko. Jednak nie mogę sobie jeszcze z rozmieszczeniem poradzić, bo coś takiego mi się pojawia - jakbym nie manewrował kolumnami - ktoś ma jakiś
Pobierz
źródło: comment_Pz6Hi1XlM9T2a5T5jPxC97p2NSAAGId6.jpg
@Devih: 'self.score_area.grid(rowspan=5, row=1, column=7, padx=4)'
W oryginale brakuje row, wtedy manager rozkładu ( ͡° ͜ʖ ͡°) wkłada w wolny wiersz.
@piotrb: Score na result poprawię, a jeśli chodzi o rozkład to właśnie tak jak napisałeś, udało mi się dojść do tego :)

Druga sprawa:
Wiesz może jak zrobić, żeby w Text widgecie użytkownik nie mógł nic wpisywać ani usuwać z klawiatury, ale żeby program mógł tam wpisywać rzeczy? Próbowałem ze state (zarówno w Text jak i Entry), ale wtedy ani użytkownik, ani program nie może tam nic wpisać. Próbowałem to zmienić