Fenster-Beenden verhindern

Fragen zu Tkinter.
Antworten
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

Hallo Community!

Ich hätte eine Frage an euch: Wie kann man bei einer Tkinter-GUI das kleine "x" oben in der Titelleiste deaktivieren, so dass man das Programm nicht beenden kann?

MFG
OpenCV
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Code: Alles auswählen

import Tkinter as tk

root = tk.Tk()
root.protocol("WM_DELETE_WINDOW",0)
tk.Button(text="Beenden",command=root.quit).pack()
root.mainloop()
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

Vielen Dank für die Antwort!

Ich hätte noch 2 kleine Fragen:
1) Wie kann ich auch das Minimieren verhindern?
2) Wie kann ich es schaffen, dass ich den Prozess über den Task-Manager z.B. nicht killen kann?

MFG
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

zu 1) keine Ahnung
zu 2) Garnicht, du könntest aber einen 2 Prozess starten, der den 1. überwacht, falls der 1. beendet wird, kann der 2. den 1 wieder starten
the more they change the more they stay the same
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

OK oder ich hab eine bessere Idee:

Wie kann ich während das Programm läuft, alle anderen Prozesse "blockieren", also verhindern, dass man auf sie zugreifen kann?
Also ich will, dass nur dieses Programm auf dem OS läuft bis zur Terminierung und alle anderen nicht aufrufbar sind für den Benutzer...
problembär

OpenCV hat geschrieben:bis zur Terminierung
Bild

Kommt auf's OS an.
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Das ist aber eher keine Python-Frage mehr, sondern Benutzeradministration. Wie man unpriviligierte Benutzer anlegt, ist natürlich abhängig vom System selber. Da du vom Taskmanager redest, wirst du wohl Windows einsetzen. Unter XP Home wird da wenig gehen, da dort die Bordmittel fehlen. Ab Vista gibt es ja die UAC, vllt. geht ja damit was, ansonsten mal das Technet durchforsten, da findet sich mit Sicherheit was zur Benutzerverwaltung und -rechten.
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

Ich habe da eine bessere Idee zur Umsetzung meines Problems gefunden:
Das Tk-Fenster soll sich einfach nach 10 Sekunden zerstören.

Wie geht das? Gibt es bei root.mainloop() vllt. ein time-Parameter, für wielange es laufen soll?
problembär

Code: Alles auswählen

root.after(10000, root.destroy)
(vor .mainloop() setzen)
Tomary
User
Beiträge: 5
Registriert: Mittwoch 10. Juni 2020, 17:49

Ich meine mit einer .vbs datei

die mit subprocess ausgeführt wird

Befehl:

Code: Alles auswählen

subprocess.Popen(['wscript.exe', r't.vbs'])
Datei:

Code: Alles auswählen


On Error Resume Next
Set objWshShl = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!//./root/cimv2")
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("select * from __instancecreationevent " & " within 1 where TargetInstance isa 'Win32_Process'")
Do
    Set objLatestProcess = colMonitoredProcesses.NextEvent
    If LCase(objLatestProcess.TargetInstance.Name) = "taskmgr.exe" Then
        objLatestProcess.TargetInstance.Terminate
    ' fake popup message
		objWshShl.Popup "Task Manager has been disabled by your administrator.", 3, "Task Manager", 16
    End If
Loop

__deets__
User
Beiträge: 14538
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ändert die Antwort nicht. Auch eine subprocess kannst du im after killen. Aber du kannst den VB-Code auch durch die Python win32 API ersetzen. Und dir so den zweiten Prozess ganz sparen.
Antworten