Saya telah mempelajari beberapa tkinter dasar dan saya menemukan kode sederhana untuk memusatkan jendela di tengah monitor Anda, kecuali ketika saya menjalankannya, itu mati secara horizontal. Ini bertele-tele tapi itu sangat mengganggu saya. Kode yang saya gunakan

# Imports
from tkinter import *

# tkinter Application
root = Tk()

#Root Geometry
root_Width = 600
root_Length = 600

# Coordinates of top left pixel of application for centred
x_left = int(root.winfo_screenwidth()/2-root_Width/2)
y_top = int(root.winfo_screenheight()/2-root_Length/2)
root_Pos = "+" + str(x_left) + "+" + str(y_top)

# Window size and position
root.geometry(str(root_Width) + "x" + str(root_Length) + root_Pos)

root.mainloop()

Bahkan jika saya menggunakan dasar, dan hanya mencoba membuka jendela ukuran monitor saya (1920x1080) pada 0,0, itu tidak sejajar secara horizontal sebesar 8px.

from tkinter import *

root = Tk()
root.geometry("1920x1080+0+0")
root.mainloop()

Saya mengambil tangkapan layar hasilnya:
tangkapan layar

Ini terbuka di tempat yang seharusnya, tetapi saya ingin memperbaikinya secara umum lebih disukai. Saya ingin 0,0 menjadi piksel kiri atas monitor. Saya mengakui masalahnya mungkin bukan dengan python, tetapi saran apa pun akan membantu.

2
Netho 19 November 2020, 22:04

1 menjawab

Jawaban Terbaik

Oke, ada dua hal yang Anda lewatkan. Yang pertama, dalam contoh pertama Anda, adalah Anda perlu memastikan tkinter mendapatkan nilai yang benar, dan untuk melakukan ini, Anda harus menggunakan metode update_idletasks() sebelum winfo.

Hal kedua, yang menjelaskan mengapa Anda harus menggunakan -8 untuk memusatkan jendela layar penuh, adalah bahwa janda tkinter memiliki bingkai luar. Anda dapat menentukan ukuran bingkai ini dengan memeriksa koordinat kiri atas jendela (winfo_rootx()) dan bingkai luar (winfo_x()). Sekarang lebar bingkai adalah perbedaan antara keduanya: frame_width = root.winfo_rootx() - root.winfo_x() sedangkan lebar jendela sebenarnya adalah real_width = root.winfo_width() + (2*frame_width), karena Anda harus mempertimbangkan bingkai di kedua sisi.

Singkatnya, untuk memusatkan jendela secara horizontal Anda lakukan:

width = root.winfo_width()
frame_width = root.winfo_rootx() - root.winfo_x()
real_width = root.winfo_width() + (2*frame_width)
x = root.winfo_screenwidth() // 2 - real_width // 2

(di sini Anda dapat mencetak lebar bingkai dan Anda akan melihatnya 8)

Dan kemudian gunakan metode geometry untuk menempatkan jendela pada posisi x.

Tentu saja Anda dapat melakukan hal yang sama untuk perataan vertikal

1
Flavio Moraes 19 November 2020, 20:58