2017-04-02 141 views
2

我試圖做,那我按下按鈕後,我得到了標籤中顯示的信息,但是,我似乎無法使標籤出現在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

回答

1

對於我所看到的,該語句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