使用按钮

时间:2016-10-15 14:40:38

标签: python tkinter box tkinter-entry

我对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()

按“安装”按钮时出错。 “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 个答案:

答案 0 :(得分: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()