ich habe ein root-window und ein toplevel-window.
ich versuche nun, auszulesen, auf welchem monitor das root-window ist, um das toplevel-window immer auf dem
'nicht-root-window-monitor' anzuzeigen (möglichst auch, wenn man das root-window mit der maus auf einen anderen monitor schiebt).
Hier ist mein bisheriger code:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import tkinter as tk
import win32api
import win32gui
class Multiple_Monitors:
def __init__(self):
self.get_MONITORDICT()
@staticmethod
def get_MONITORDICT():
monitor_dict = {}
monitors = win32api.EnumDisplayMonitors()
for monitor_idx, monitor in enumerate(monitors):
monitor_screen = win32api.GetMonitorInfo(monitors[monitor_idx][0])['Monitor']
monitor_work = win32api.GetMonitorInfo(monitors[monitor_idx][0])['Work']
monitor_flag = win32api.GetMonitorInfo(monitors[monitor_idx][0])['Flags']
monitor_name = win32api.GetMonitorInfo(monitors[monitor_idx][0])['Device']
monitor_dict[monitor_idx] = {'Monitor': monitor_screen,
'Work': monitor_work,
'Flag': monitor_flag,
'Device': monitor_name
}
return monitor_dict
@staticmethod
def get_MONITORACTIVE():
hwnd = win32gui.GetForegroundWindow()
return hwnd
class Main(tk.Tk):
def __init__(self
):
tk.Tk.__init__(self)
self.title("Root")
self.geometry('250x50+250+250')
self.toplevel = None
self.counter = 1 # Wenn 0, wechselt das Fenster erst beim zweiten Klick
def main(self):
tk.Button(self, text="Set Toplevel-Window", command=self.change_screen).pack()
def set_toplevel(self):
self.toplevel = tk.Toplevel(self)
self.toplevel.title("Toplevel")
self.toplevel.geometry('250x50+300+100')
tk.Label(self.toplevel, text="Thank you!").pack()
tk.Button(self.toplevel, text="Close", command=self.toplevel.destroy).pack()
def change_screen(self):
if self.toplevel is None:
self.set_toplevel()
else:
self.toplevel.destroy()
self.set_toplevel()
multiple_monitors = Multiple_Monitors()
monitor_dict = multiple_monitors.get_MONITORDICT()
if self.counter == len(monitor_dict.items())-1:
self.counter = 0
else:
self.counter += 1
monitor_active = multiple_monitors.get_MONITORACTIVE()
for key, value in monitor_dict[self.counter].items():
if key == 'Work':
win32gui.MoveWindow(monitor_active,
value[0], # Position x
value[1], # Position y
self.winfo_rootx(), # Fensterbreite
75, # Fensterhöhe
True # ??? (Funktioniert auch mit False)
)
def main():
root = Main()
root.main()
root.mainloop()
if __name__ == '__main__':
main()
Kann mir bitte jmd unter die arme greifen?