I created в small GUI in Tkinter/python
:
import Tkinter
import tkMessageBox
import os
top = Tkinter.Tk()
top.geometry("400x250")
def root_login():
os.system("gksudo su && sudo su")
tkMessageBox.showinfo("Login successful!")
def close_window():
top.destroy()
B = Tkinter.Button(top, text ="Login", command = root_login)
B.pack()
Q = Tkinter.Button(top, text ="Quit", command = close_window)
Q.pack()
top.mainloop()
If an incorrect password is given in the gksudo su dialog
, the составьте в форме диалога still шоу "Login successful!".
How do I шоу that the password неудар в лунку was wrong, instead of "Login successful!". I want to верьте тебе this window в туз в login screen for the application гm building.
На краю того, чтобы быть вне темы, но ради gksudo
:
Не уверенный, чего Вы хотите достигнуть, так как GUI не имеет никакого эффекта на то, что происходит в терминале :)
Проблема состоит в том, что Вы не устанавливаете условие для tkMessageBox.showinfo("Login successful!")
выполняться, так что бы ни случилось в os.system("gksudo su && sudo su")
, следующая строка будет выполнена.
def root_login():
os.system("gksudo su && sudo su")
tkMessageBox.showinfo("Login successful!")
Во-первых, Вы не должны использовать os.system
больше: Действительно, действительно старомодный.
Посмотрите ниже для альтернативного кодирования, использования subprocess.check_call
:
#!/usr/bin/env python
import subprocess
import Tkinter
import tkMessageBox
top = Tkinter.Tk()
top.geometry("400x250")
def root_login():
try:
subprocess.check_call(["gksudo", "su"])
except subprocess.CalledProcessError:
tkMessageBox.showinfo("message", "OOOOPS...\nWrong password!")
else:
tkMessageBox.showinfo("message", "Login successful!")
def close_window():
top.destroy()
B = Tkinter.Button(top, text ="Login", command = root_login)
B.pack()
Q = Tkinter.Button(top, text ="Quit", command = close_window)
Q.pack()
top.mainloop()
Но снова, gksudo su
не имеет никакого эффекта, так как Вы выполняете GUI :)
subprocess.check_call(["gksudo", "su"])
... повысит a subprocess.CalledProcessError
в случае, если пароль является неправильным, и покажите сообщение:
Если пароль является правильным, сообщение:
появится.
try/except/else
конструкция, я сделал по причинам ясности. Функция ниже делает точно то же, так как функция wil "переходит" от строки:
subprocess.check_call(["gksudo", "su"])
кому:
tkMessageBox.showinfo("message", "OOOOPS...\nWrong password!")
в случае, если, и сразу если, первый повышает subprocess.CalledProcessError
:
def root_login():
try:
subprocess.check_call(["gksudo", "su"])
tkMessageBox.showinfo("message", "Login successful!")
except subprocess.CalledProcessError:
tkMessageBox.showinfo("message", "OOOOPS...\nWrong password!")