Tkinter/python
に小さなGUIを作成しました:
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()
gksudo su dialog
に間違ったパスワードが指定された場合、ダイアログには「Login successful!」と表示されます。
「ログインに成功しました!」ではなく、パスワードの入力が間違っていたことを表示するにはどうすればよいですか。このウィンドウを、作成中のアプリケーションのログイン画面として作成します。
トピック外ですが、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()
_
ただし、GUIを実行しているため、_gksudo su
_は効果がありません。
subprocess.check_call(["gksudo", "su"])
...パスワードが間違っている場合に_subprocess.CalledProcessError
_を発生させ、メッセージを表示します:
パスワードが正しい場合、メッセージ:
表示されます。
_try/except/else
_構造、わかりやすくするためにしました。関数は行から「ジャンプ」するので、以下の関数はまったく同じことを行います。
_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!")
_