Pruefstaende auf den zweiten Monitor, Desktop-Verknuepfung mit Symbol
Seine Ansagen "teste links auf dem 1080p monitor nicht mehr auf dem main ... weil da schau ich nun video" "und das steuertool hat noch kein installer und die rechnungstool hat das icon nicht auf dem desktop etc selbe beim steuertool" Pruefplatz Der Platz fuer Pruefstandsfenster lag bei "Bildschirmbreite + 20", also RECHTS neben dem Hauptmonitor. Bei ihm steht der zweite Monitor aber LINKS (x = -1920), und rechts ist gar nichts: die Fenster gingen ins Leere. Sie liefen, waren aber nirgends zu sehen - das hat beim Bildermachen einige Zeit gekostet, ehe es auffiel. theme.pruefplatz() sucht jetzt den nicht-primaeren Monitor und liefert dessen Ecke. Gibt es keinen, bleibt es beim alten Verhalten. Das Steuerrechnungstool hatte ueberhaupt keine Sonderposition - dessen Pruefstandsfenster gingen mitten auf den Hauptbildschirm auf. Verknuepfungen Der Haken "Verknuepfung auf dem Desktop" ist jetzt vorgesetzt statt abgewaehlt, und jede Verknuepfung traegt IconFilename ausdruecklich. Ohne das erbt sie ihr Symbol vom UPDATER - und Windows zeigte an ihrer Stelle das nackte Standardsymbol. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
This commit is contained in:
parent
f7801f46f0
commit
adbb035cf1
3 changed files with 68 additions and 7 deletions
61
theme.py
61
theme.py
|
|
@ -66,6 +66,61 @@ def titelleiste_faerben(fenster, dunkel):
|
|||
return False
|
||||
|
||||
|
||||
def pruefplatz():
|
||||
"""Wo ein Pruefstand seine Fenster aufmachen soll: "+x+y" oder "".
|
||||
|
||||
Seine Ansage am 07.09.2026: *"teste links auf dem 1080p monitor nicht mehr
|
||||
auf dem main ... weil da schau ich nun video"*.
|
||||
|
||||
Vorher lag der Platz bei `Bildschirmbreite + 20` - also RECHTS neben dem
|
||||
Hauptmonitor. Bei ihm steht der zweite Monitor aber LINKS (x = -1920), und
|
||||
rechts ist gar nichts: die Fenster gingen ins Leere. Sie liefen zwar, waren
|
||||
aber nirgends zu sehen - das hat beim Bildermachen einige Zeit gekostet.
|
||||
|
||||
Gesucht wird deshalb der nicht-primaere Monitor. Gibt es keinen, bleibt es
|
||||
beim alten Verhalten (neben den Bildschirm), denn im Weg sein soll ein
|
||||
Pruefstand auch dann nicht.
|
||||
"""
|
||||
if not sys.platform.startswith("win"):
|
||||
return ""
|
||||
try:
|
||||
import ctypes
|
||||
from ctypes import wintypes
|
||||
|
||||
class RECT(ctypes.Structure):
|
||||
_fields_ = [("left", ctypes.c_long), ("top", ctypes.c_long),
|
||||
("right", ctypes.c_long), ("bottom", ctypes.c_long)]
|
||||
|
||||
class MONITORINFO(ctypes.Structure):
|
||||
_fields_ = [("cbSize", wintypes.DWORD), ("rcMonitor", RECT),
|
||||
("rcWork", RECT), ("dwFlags", wintypes.DWORD)]
|
||||
|
||||
gefunden = []
|
||||
|
||||
def je_monitor(hmon, hdc, lprect, daten):
|
||||
info = MONITORINFO()
|
||||
info.cbSize = ctypes.sizeof(MONITORINFO)
|
||||
if ctypes.windll.user32.GetMonitorInfoW(hmon, ctypes.byref(info)):
|
||||
r = info.rcWork
|
||||
gefunden.append((bool(info.dwFlags & 1), # 1 = MONITORINFOF_PRIMARY
|
||||
r.left, r.top, r.right - r.left))
|
||||
return 1
|
||||
|
||||
RUECKRUF = ctypes.WINFUNCTYPE(ctypes.c_int, wintypes.HMONITOR,
|
||||
wintypes.HDC, ctypes.POINTER(RECT),
|
||||
wintypes.LPARAM)
|
||||
ctypes.windll.user32.EnumDisplayMonitors(0, 0, RUECKRUF(je_monitor), 0)
|
||||
# Der breiteste Nebenmonitor - bei mehreren der linkeste.
|
||||
neben = sorted((m for m in gefunden if not m[0]),
|
||||
key=lambda m: (-m[3], m[1]))
|
||||
if neben:
|
||||
_, x, y, _ = neben[0]
|
||||
return f"+{x + 30}+{y + 40}"
|
||||
except Exception: # noqa: BLE001 - dann eben der alte Weg
|
||||
pass
|
||||
return ""
|
||||
|
||||
|
||||
def testlauf():
|
||||
"""Faehrt gerade ein Pruefstand das Programm?
|
||||
|
||||
|
|
@ -478,10 +533,10 @@ class ThemeMixin:
|
|||
"""
|
||||
d.configure(bg=self.col_bg)
|
||||
if testlauf():
|
||||
# Wie das Hauptfenster: neben den Bildschirm, und ohne grab_set -
|
||||
# Wie das Hauptfenster: auf den zweiten Monitor, und ohne grab_set -
|
||||
# ein Dialog, der Maus und Tastatur festhaelt, blockiert den
|
||||
# Menschen, der nebenher schreibt.
|
||||
d.geometry(f"+{d.winfo_screenwidth() + 20}+40")
|
||||
# Menschen, der nebenher arbeitet.
|
||||
d.geometry(pruefplatz() or f"+{d.winfo_screenwidth() + 20}+40")
|
||||
d.grab_set = lambda *a, **k: None
|
||||
try:
|
||||
d.attributes("-toolwindow", True) # nicht in die Taskleiste
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue