1

Тема: помилка self

from tkinter import messagebox, Tk

def display(self):
    messagebox.showinfo("Date", frenk.get())
root=Tk()
root.title("Date&time")
root.geometry("400x500")


a=IntVar
a=2
b=IntVar
b=3
frenk=IntVar
frenk=a+b
frenk=StringVar

frenk.get()
frenk.display(self)

message_button=Button(text="OK", command=display)
message_button.pack()

root.mainloop()

Вибиває помилку

  File "C:/Users/nomerq12/Desktop/date.py", line 19, in <module>
    frenk.get()
TypeError: get() missing 1 required positional argument: 'self'

2 Востаннє редагувалося koala (26.09.2018 11:32:13)

Re: помилка self

1. Використовйте теги code (значок <>)
2. Описуйте завдання - можливо, вам щось зовсім інше потрібне, а ви зосередилися лише на цій помилці.
3. У мене вибиває

NameError: name 'IntVar' is not defined

і це зрозуміло - ви ж не імпортували IntVar з tkinter. Відтак, гадаю, ваш код відрізняється від того, що ви навели; а отже, особливого сенсу вам щось підказувати немає, бо ви вже зайняті чимось іншим. Звертайтеся до форуму лише коли у вас закінчаться сили щось робити із кодом.

Подякували: leofun011

3

Re: помилка self

я справді забув скопіювати перший рядок коду.Ось він:

from tkinter import *

4

Re: помилка self

Взагалі-то там ще два пункти було.
Ну і якщо ви створюєте об'єкт класу, а не робите frank його псевдонімом, то слід ще й дужки дописати.

Подякували: leofun01, almaz31q2

5

Re: помилка self

Можете показати як має виглядати код для обчислення найпростіших прикладів в графічному інтерфейсі?

6

Re: помилка self

Стандартна помилка новачка. Графічний інтерфейс не призначений для обчислення, він призначений для спілкування з користувачем. Тобто вам потрібен окремо ваш звичайний код для обчислення, окремо - ваш код для створення інтерфейсу, і засоби введення-виведення для передачі інформації з одного в інше.
Крім того, ви звикли до лінійного виконання програм. Графічний інтерфейс реалізує іншу, подійну модель - користувач продукує події, програма їх обробляє кожну окремо. Якщо трохи (зовсім трохи) заглибитися, то відбувається щось на кшталт (всі назви умовні)

while True:
  for event in get_system_events():
    handler[event.type](event.data)

Це, власне, і є метод mainloop() (ще раз - дуже спрощено). get_system_events повертає список подій, що сталися (користувач натиснув кнопку, пересунув мишку і т.д.); є список обробників (отой handler), який для кожної події викликає відповідну функцію.
Найпримітивніше на tkinter можна вводити дані через віджет Entry, на кшталт

#інтерфейсна частина
input = Entry(root) #створюємо нове поле для введення
input.pack() #розміщуємо його на формі

#там, де треба оброляти дані
s = input.get() #читаємо стрічку, майже як із консольного input()

Виводити можна, скажімо, на якийсь Label:

#інтерфейсна частина
output = Label(root, text="")
output.pack()

#там, де треба оброляти дані
output['text'] = "що-ми-там-хочемо-вивести"

Ну і все це прив'язати до якихось подій, скажімо, до натискання кнопки:

#інтерфейсна частина
button = Button(text="Пуск", command=calculate) #calculate - наша функція для обчислень
button.pack()

def calculate():
    #а ось тут ми, власне, і обробляємо дані
Подякували: Torbins1

7 Востаннє редагувалося ping (27.09.2018 10:57:24)

Re: помилка self

almaz31q написав:

Можете показати як має виглядати код для обчислення найпростіших прикладів в графічному інтерфейсі?

from tkinter import *
import time

MAX = 30

root = Tk()
root.geometry('{}x{}'.format(400, 100))
progress_var = DoubleVar() #here you have ints but when calc. %'s usually floats
theLabel = Label(root, text="Sample text to show")
theLabel.pack()
progressbar = ttk.Progressbar(root, variable=progress_var, maximum=MAX)
progressbar.pack(fill=X, expand=1)


def loop_function():

    k = 0
    while k <= MAX:
    ### some work to be done
        progress_var.set(k)
        k += 1
        time.sleep(0.02)
        root.update_idletasks()
    root.after(100, loop_function)

loop_function()
root.mainloop()

https://stackoverflow.com/questions/365 … -in-a-loop


www.python-course.eu  - хороший і вартий уваги ресурс

import tkinter as tk

counter = 0 
def counter_label(label):
  counter = 0
  def count():
    global counter
    counter += 1
    label.config(text=str(counter))
    label.after(1000, count)
  count()
 
 
root = tk.Tk()
root.title("Counting Seconds")
label = tk.Label(root, fg="dark green")
label.pack()
counter_label(label)
button = tk.Button(root, text='Stop', width=25, command=root.destroy)
button.pack()
root.mainloop()

https://www.python-course.eu/tkinter_buttons.php

Подякували: leofun01, FakiNyan2

8

Re: помилка self

Дякую що пояснили мені.Дуже дякую

Подякували: FakiNyan1