я хочу взять значение из входа, но это не сработало - PullRequest
0 голосов
/ 03 октября 2019

проблема в следующем:

return self.func(*args)
TypeError: b1_pg() missing 1 required positional argument: 'e1'

Я ищу в Google, но ничего не нашел

from tkinter import *
from tkinter import ttk
from functools import partial

root = Tk()
root.geometry('400x200+100+200')
def b1_pg(e1):
    search = str(e1.get())
    print(search)
    return search

what = ttk.Label(root, text="who do you want to search about???").grid(row=1, column=0)

e1 = ttk.Entry(root, width=40).grid(row=1, column=1)

b1 = ttk.Button(root, text="if you are ready prees here", command=b1_pg).grid(row=2, column=0)

#information=ttk.Label(root,text=family{search})

root.title('family')
root.mainloop()

Я ожидаю, что код примет значение из e1 (запись), когдая нажимаю кнопку, но она выдает ошибку

return self.func(*args)
TypeError: b1_pg() missing 1 required positional argument: 'e1'

что не так в моем коде?

1 Ответ

0 голосов
/ 04 октября 2019

У вас есть несколько вещей, которые нам нужно исправить.

Одна проблема, которую вы используете grid() в той же строке, в которой вы определяете поле ввода. Из-за этого e1 на самом деле всегда будет возвращать None, поскольку grid() назначается таким образом.

Чтобы это исправить, вы можете сделать e1.grid() на новой строке, и это позволит вамиспользовать e1.get() без проблем.

Сказанное позволяет исправить ваш импорт, так как * плохо в том смысле, что вы в конечном итоге перезапишите методы.

Поэтому вместо выполнения:

из tkinter import *

Сделайте это:

import tkinter as tk

Мы также должны изменить некоторые вещи в вашей функции.

Секция return не собираетсяделать что-то полезное здесь. Вы не можете вернуть значения кнопке, вызвавшей функцию. Он не может быть использован каким-либо образом, поэтому вы можете удалить эту строку. Если вам нужно использовать это значение где-то, вы можете отправить его из функции туда, где вам нужно.

Связано с вашей ошибкой в ​​вашем вопросе. Нет необходимости в аргументе e1 в вашей функции. Вы не передаете аргумент функции в первую очередь, так что это приведет к ошибке. Во-вторых, вы уже вызываете e1.get () из глобального пространства имен, поэтому аргумент не требуется.

Наконец, вам не нужно делать str(e1.get()). Метод get() уже возвращает строку. Он всегда будет возвращать строку.

См. Код ниже и дайте мне знать, если у вас есть какие-либо вопросы:

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
root.title('family')
root.geometry('400x200+100+200')


def b1_pg():
    search = e1.get()
    print(search)


ttk.Label(root, text="who do you want to search about???").grid(row=1, column=0)
e1 = ttk.Entry(root, width=40)
e1.grid(row=1, column=1)
ttk.Button(root, text="if you are ready press here", command=b1_pg).grid(row=2, column=0)

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...