ฉันสร้างรหัสที่ค่อนข้างซับซ้อนนี้เพื่อค้นหาหน้าต่างที่ฉันต้องการย้ายไปยังหน้าจอเฉพาะที่กำหนดโดยความกว้างเป็นมม. ของจอภาพ (มันจะปรับขนาดเป็นความละเอียดที่ถูกต้องและตั้งค่าแอปเต็มหน้าจอด้วย):
#!/usr/bin/env python3
นำเข้ากระบวนการย่อย
เวลานำเข้า
def ได้รับ (cmd): กลับ subprocess.check_output (cmd).decode ('utf-8')
def ปรับความละเอียด (ชื่อ, ความละเอียด): # ชื่อ = DP-2, ความละเอียด: 1920x1080
รับ (['xrandr', '--output', ชื่อ, '--mode', res])
def edit_window (มอนิเตอร์, window_name, ฟังก์ชัน):
พิมพ์ ('ย้าย', window_name, 'ถึง', จอภาพ)
รับ (['wmctrl', '-F', '-r', window_name, '-e', '100,' +
จอภาพ['x'] + ',' + จอภาพ['y'] + ',600,600'])
รับ (['wmctrl', '-F', '-r', window_name, '-b', ฟังก์ชัน])
def get_monitors():
screendata = [l.split() สำหรับ l ใน get(['xrandr', '--current']
).replace('primary', '').splitlines() ถ้า 'เชื่อมต่อ' ใน l]
จอภาพ = []
สำหรับผมในช่วง (len (ข้อมูลหน้าจอ)):
จอภาพ = dict()
[ขนาด, x, y] = ข้อมูลหน้าจอ[i][2].split('+')
จอภาพ = {
'ชื่อ': ข้อมูลหน้าจอ[i][0],
'ความกว้าง': ข้อมูลหน้าจอ[i][-3],
'ความสูง': ข้อมูลหน้าจอ[i][-1],
'ขนาด': ขนาด,
'x': x,
'ย': ย
}
monitors.append (มอนิเตอร์)
ส่งคืนจอภาพ
def find_element_where (องค์ประกอบ คีย์ ค่า):
ส่งคืนถัดไป ((รายการสำหรับรายการในองค์ประกอบถ้ารายการ [คีย์] == ค่า), ไม่มี)
def window_info_to_dict (ข้อมูล):
_, _, x, y, ความกว้าง, ความสูง, _, *ชื่อ = info.split()
กลับ {'x': x, 'y': y, 'ความกว้าง': ความกว้าง, 'ความสูง': ความสูง, 'ชื่อ': ' '.join(ชื่อ)}
def get_window_info():
รายการส่งคืน (แผนที่ (window_info_to_dict, รับ (['wmctrl', '-l', '-G']).splitlines()))
# ค่าคงที่:
main_monitor_width = '256 มม.'
controller_app = 'ชื่อ_of_app'
video_player = 'เครื่องเล่นสื่อ VLC'
Correct_Resolution = '1920x1080'
# ตัวแปร:
did_remove_fullscreen = เท็จ
ในขณะที่ทรู:
พยายาม:
# รับจอภาพ:
จอภาพ = get_monitors()
main_monitor = ถัดไป (
(มอนิเตอร์สำหรับมอนิเตอร์ในมอนิเตอร์ ถ้ามอนิเตอร์['width'] == main_monitor_width), ไม่มี)
รอง_monitor = ถัดไป (
(มอนิเตอร์สำหรับมอนิเตอร์ในมอนิเตอร์ ถ้ามอนิเตอร์['width'] != main_monitor_width), ไม่มี)
# พิมพ์ (main_monitor)
# พิมพ์ (secondary_monitor)
# รับ windows:
window_info = get_window_info()
controller_app_window_info = find_element_where(
window_info, 'ชื่อ', controller_app)
video_player_window_info = find_element_where(
window_info, 'ชื่อ', video_player)
# ตรวจสอบว่าจอภาพรองมีขนาดที่เหมาะสมหรือไม่:
ถ้าsecondary_monitor และsecondary_monitor['size'] != correct_ resolution:
พิมพ์ ('ความละเอียดไม่ถูกต้อง',secondary_monitor)
ปรับความละเอียด (secondary_monitor ['ชื่อ'], การแก้ไขความละเอียด)
# พิมพ์ (controller_app_window_info)
# พิมพ์ (video_player_window_info)
ถ้า main_monitor:
ถ้า controller_app_window_info['x'] != main_monitor['x'] หรือ controller_app_window_info['y'] != main_monitor['y'] หรือ controller_app_window_info['width'] != '1920' หรือ controller_app_window_info['height'] ! = '1080':
พิมพ์ ('แอพควบคุมอยู่ในตำแหน่งไม่ถูกต้อง')
edit_window(main_monitor, controller_app, 'เพิ่ม,เต็มหน้าจอ')
อื่น:
พิมพ์ ('ไม่มีจอภาพหลัก')
ถ้าsecondary_monitor:
ถ้า video_player_window_info['x'] !=secondary_monitor['x'] หรือ video_player_window_info['y'] !=secondary_monitor['y'] หรือ video_player_window_info['width'] != '1920' หรือ video_player_window_info['height'] ! = '1080':
พิมพ์ ('เครื่องเล่นวิดีโออยู่ในตำแหน่งไม่ถูกต้อง')
edit_window(secondary_monitor, video_player, 'เพิ่ม,เต็มหน้าจอ')
did_remove_fullscreen = เท็จ
อื่น:
พิมพ์ ('ไม่มีจอภาพรอง')
ถ้า main_monitor ไม่ใช่ did_remove_fullscreen:
edit_window(main_monitor, video_player, 'ลบ,เต็มหน้าจอ')
did_remove_fullscreen = จริง
ยกเว้น ข้อยกเว้นเป็น e:
พิมพ์ ('เกิดข้อผิดพลาด', จ)
เวลานอน(10)