Получить текст из окна поиска записей 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()
Другие вопросы по тегам