2017-04-02 3 views
2

Ich versuche zu machen, dass, nachdem ich den Knopf gedrückt habe, bekomme ich die Informationen auf dem Etikett, aber ich kann nicht scheinen, dass das Etikett in der GUI erscheinen . Ich bekomme Fehler, wenn ich „Vartotojo informacija> Typ in Namen und drücken Sie "Rodyti informacija" drücken und ich bekomme Fehler auf dieser Linie w.pack(LEFT) (sollte die Leitung 95-ish sein):Tkinter.Label erscheint nicht nach Drücken der Taste

Vollzurückverfolgungs:

'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' 

Mein Code:.

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

einige oder alle Ihrer Einrückung ist falsch. –

+0

vollständiger Code hinzugefügt, der Rest ist unvollendet, aber ich brauche Hilfe nur mit der 'def informacija()' Teil – Lenton

+0

Ich kann nicht reproduzieren die Attribut Fehler Sie sagen, dass Sie haben. Welcher Knopf wurde gedrückt? Bitte bearbeiten Sie Ihre Frage erneut und fügen Sie diese Informationen zusammen mit dem vollständigen Traceback bis zur Zeile hinzu, in der der Fehler aufgetreten ist. – martineau

Antwort

1

Für das, was ich sehen kann, die Aussage w.pack(LEFT) braucht nur ein Schlüsselwort (dh w.pack(side=LEFT) Ohne Schlüsselwort, erwartet er ein Argument anderer Art (wenn help(Button.pack) Aufruf Sie, dass dieser positi sehen werden onal Argument wäre ein Wörterbuch)

+0

danke, das hat funktioniert. Aber jetzt, wenn ich den "rodyti informacija" Knopf drücke, zeigt das Etikett mir "0", wenn es die Information über den Benutzer anzeigen soll. – Lenton

+0

@Lenton; Ich verstehe nicht wirklich, was du meinst? Und kann Ihr Problem nicht reproduzieren. Sie möchten nun, dass das Label 'w' die Informationen anzeigt, die gerade in die Textbox eingegeben wurden? Dann gib es in der Etikette an; 'w = Label (root, text = imti)' (übrigens, wenn ich Informationen anfordere, denke ich, dass normalerweise das Widget ['Entry'] (http://effbot.org/tkinterbook/entry.htm) diese Aufgabe besser erfüllen würde .) – arrethra

+0

Ich meine, nachdem ich die Taste gedrückt habe, wird der Shell-Befehl mit der Variablen aus dem Textfeld ausgeführt, alles funktioniert gut, außer ich möchte das Shell-Befehl Ergebnis in Label angezeigt werden, aber es zeigt "0" in Label für Ich werde jedoch in der Eingabeaufforderung das Shell-Befehlsergebnis korrekt angezeigt. – Lenton

Verwandte Themen