Получить текст из окна поиска записей Tkinter с помощью кнопки
Я довольно новичок в Python, и я только начал с Tkinter. Я пытаюсь сделать несколько файлов для самостоятельных упражнений. Пока все хорошо, но я столкнулся с проблемой (я опубликую весь код, а после я продолжу с проблемой, чтобы вы могли видеть, что я хочу сделать, и где я не понимаю, как это сделать).
#!/usr/bin/python
from tkinter import *
from PIL import Image, ImageTk
import subprocess
class Window(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title("ez-Installer")
self.pack(fill=BOTH, expand=1)
updateButton = Button(self, text="Update", command=self.system_update)
updateButton.place(x=50, y=50)
syncButton = Button(self, text="Sync packages", command=self.system_sync)
syncButton.place(x=150, y=50)
cmd1 = StringVar()
mEntry = Entry(self,textvariable=cmd1).pack()
installButton = Button(self, text="Install", command=self.system_install)
installButton.place(x=50, y=150)
def system_install(self):
package = cmd1.get()
install = "sudo pacman -S {} --noconfirm".format(package)
subprocess.call([install], shell=True)
def system_exit(self):
exit()
def system_update(self):
subprocess.call(["sudo pacman -Su --noconfirm"], shell=True)
def system_sync(self):
subprocess.call(["sudo pacman -Syy --noconfirm"], shell=True)
root = Tk()
root.geometry("400x300")
app = Window(root)
root.mainloop()
Ошибка при нажатии кнопки "Установить". msgstr "cmd1 не определен".
def system_install(self):
package = cmd1.get()
install = "sudo pacman -S {} --noconfirm".format(package)
subprocess.call([install], shell=True)
Как вы видите, я хочу, чтобы он получал текст из поля поиска, который я добавил сюда:
cmd1 = StringVar()
mEntry = Entry(self,textvariable=cmd1).pack()
installButton = Button(self, text="Install", command=self.system_install)
installButton.place(x=50, y=150)
Я знаю, что моя заявка находится под def init_window(self):
, но как я могу получить значение cmd1
оттуда? Является ли это возможным? Если нет или если это слишком много хлопот, какой будет аналогичная альтернатива?
1 ответ
В вашем system_install
метод у вас нет доступа к cmd1
переменная, поскольку вы не прикрепили его к экземпляру объекта. Вы только что создали его как локальную переменную в init_window
метод. Чтобы исправить это, используйте self.cmd1
в каждом месте, чтобы сделать его переменной экземпляра, которая видна всем методом через self
аргумент.
Отдельная проблема mEntry
будет определяться с None
как pack()
метод ничего не возвращает. Я подозреваю, что вы хотите сделать там:
self.cmd1 = StringVar()
self.mEntry = Entry(self,textvariable=self.cmd1)
self.mEntry.pack()