Tkinter.Label在按钮按下后不显示

Tkinter.Label在按钮按下后不显示

问题描述:

我试图做,那我按下按钮后,我得到了标签中显示的信息,但是,我似乎无法使标签出现在GUI 。我得到的错误,当我按下“Vartotojo informacija>键入名称,然后按 “rodyti informacija”,我就在这行w.pack(LEFT)错误(应该是95行-ISH):Tkinter.Label在按钮按下后不显示

完全回溯:

'id' is not recognized as an internal or external command, 
operable program or batch file. 
Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python\lib\lib-tk\Tkinter.py", line 1542, in __call__ 
    return self.func(*args) 
    File "tkinter-label-not-showing-after-button-pressed.py", line 96, in <lambda> 
    myg1 = Button(virsus, text="Rodyti informacija", command=lambda: gauti()) 
    File "tkinter-label-not-showing-after-button-pressed.py", line 103, in gauti 
    w.pack(LEFT) 
    File "C:\Python\lib\lib-tk\Tkinter.py", line 1946, in pack_configure 
    + self._options(cnf, kw)) 
    File "C:\Python\lib\lib-tk\Tkinter.py", line 1169, in _options 
    for k, v in cnf.items(): 
AttributeError: 'str' object has no attribute 'items' 

我的代码:

from Tkinter import * 
import tkMessageBox 
from sys import version_info 
import subprocess 

root = Tk() 
root.title("Administravimas") 

virsus = Frame(root) 
virsus.pack() 
apacia = Frame(root) 
apacia.pack(side=BOTTOM) 

def filtras(): 
    root = Tk() 
    root.title("Filtravimas pagal uzklausa") 
    root.geometry("300x100") 
    tekstas = Text(root, height=1, width=15) 
    tekstas.pack(side=TOP) 
    virsus = Frame(root) 
    virsus.pack() 
    apacia = Frame(root) 
    apacia.pack(side=BOTTOM) 
    myg1 = Button(virsus, text="Filtruoti", command=lambda: gauti()) 
    myg1.pack(side=BOTTOM) 

    def gauti(): 
     imti=tekstas.get("1.0", "end-1c") 
     subprocess.call("grep -i '{imti}' /var/log/syslog > " 
         "logai/uzklausa/$(date +%d_%m_%Y.txt)".format(imti=imti), 
         shell=True) 

def vartotojas(): 
    root = Tk() 
    root.title("Filtravimas pagal vartotoju prisijungimus") 
    root.geometry("300x100") 
    tekstas = Text(root, height=1, width=15) 
    tekstas.pack(side=TOP) 
    virsus = Frame(root) 
    virsus.pack() 
    apacia = Frame(root) 
    apacia.pack(side=BOTTOM) 
    myg1 = Button(virsus, text="Filtruoti", command=lambda: gauti()) 
    myg1.pack(side=BOTTOM) 

    def gauti(): 
     imti = tekstas.get("1.0", "end-1c") 
     subprocess.call("grep -i '{imti}' /var/log/auth.log > " 
         "logai/vartotojai/$(date +%d_%m_%Y.txt)".format(imti=imti), 
         shell=True) 

def portas(): 
    root = Tk() 
    root.title("Atidaryti/uzdaryti portus") 
    root.geometry("300x100") 
    virsus = Frame(root) 
    virsus.pack() 
    apacia = Frame(root) 
    apacia.pack(side=BOTTOM) 
    myg1 = Button(virsus, text="Atidaryti porta") 
    myg2 = Button(virsus, text="Uzdaryti porta") 
    myg1.pack(side=LEFT) 
    myg2.pack(side=LEFT) 
    root.mainloop() 

def administ(): 
    root = Tk() 
    root.title("Administrouti vartotojus") 
    root.geometry("400x100") 
    virsus = Frame(root) 
    virsus.pack() 
    apacia = Frame(root) 
    apacia.pack(side=BOTTOM) 
    myg1 = Button(virsus, text="Kurti vartotoja") 
    myg1.pack(side=LEFT) 
    myg2 = Button(virsus, text="Naikinti vartotoja") 
    myg2.pack(side=LEFT) 
    myg3 = Button(virsus, text="Keisti vartotojo grupe") 
    myg3.pack(side=BOTTOM) 
    root.mainloop() 

def informacija(): 
    root = Tk() 
    root.title("Vartotoju informacija") 
    root.geometry("400x100") 
    tekstas = Text(root, height=1, width=15) 
    tekstas.pack(side=TOP) 

    virsus = Frame(root) 
    virsus.pack() 
    apacia = Frame(root) 
    apacia.pack(side=BOTTOM) 
    myg1 = Button(virsus, text="Rodyti informacija", command=lambda: gauti()) 
    myg1.pack(side=BOTTOM) 

    def gauti(): 
     imti = tekstas.get("1.0", "end-1c") 
     info = subprocess.call("id '{imti}' ".format(imti=imti), shell=True) 
     w = Label(root, text= "info") 
     w.pack(LEFT) 

    root.mainloop() 

myg1 = Button(virsus, text="Filtruoti pagal uzklausa", command=filtras) 
myg2 = Button(apacia, text="Filtrouti pagal vartotoju prisijungimus", command=vartotojas) 
myg3 = Button(virsus, text="Atidaryti/uzdaryti portus", command=portas) 
myg4 = Button(apacia, text="Administruoti vartotojus", command=administ) 
myg5 = Button(apacia, text="Vartotojo informacija", command=informacija) 


myg1.pack(side=LEFT) 
myg2.pack(side=RIGHT) 
myg3.pack(side=LEFT) 
myg4.pack(side=RIGHT) 
myg5.pack(side=RIGHT) 

root.mainloop() 
+0

部分或全部缩进不正确。 –

+0

添加了完整的代码,其余部分未完成,但我只需要 'def informacija()'部分 – Lenton

+0

的帮助我无法再现您说的属性错误。哪个按钮被按下?请再次[编辑]您的问题,并将该信息与完整回溯一起追加到发生错误的行上。 – martineau

对于我所看到的,该语句w.pack(LEFT)只需要一个关键字(即w.pack(side=LEFT)没有关键字,预计另一种参数(主叫help(Button.pack)时,你会看到这个POSITI onal参数将是一本字典)

+0

谢谢你,工作。但是,现在当我按下“rodyti informacija”按钮时,标签会给我显示“0”,当它假设显示有关用户的信息时。 – Lenton

+0

@Lenton;我不是很明白你的意思吗?并不能重现你的问题。您现在希望标签'w'显示刚才在文本框中输入的信息?然后在标签中指定; 'w = Label(root,text = imti)'(顺便说一句,在请求信息时,我认为通常widget ['Entry'](http://effbot.org/tkinterbook/entry.htm) ) – arrethra

+0

我的意思是在我按下按钮之后,shell命令与文本框中的变量一起运行,一切正常,除了我希望shell命令结果显示在标签中,但它在标签中显示为“0”然而,我在命令提示符下正确地显示了shell命令的结果。 – Lenton