Я поместил виджет дерева в свое окно tk с помощью .place(), но он размещается в неправильных координатах, примерно на 100 пикселей как по x, так и по y, приближаясь к 0. Размер дерева также влияет, что делает он меньше, чем должен быть. Ни у одного из моих других виджетов нет этой проблемы.
Это происходит только на моем ноутбуке, а не на других компьютерах. Дисплей моего ноутбука 1920x1080.
Есть ли какие-то настройки, которые бы это исправили?
Вот пример. Кнопки размещаются в тех же координатах, что и древовидное представление, но для меня кнопки отображаются в правильных координатах, а древовидное представление - нет.
import tkinter as tk
from tkinter import ttk
import customtkinter as ctk
class Example(ctk.CTk):
def __init__(self, *args, **kwargs):
super().__init__()
self.geometry('720x800')
self.resizable(False, False)
container = ctk.CTkFrame(master=self)
container.pack(side='top', fill='both', expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (A, B):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky= 'nsew')
frame.grid_columnconfigure(0,weight=1)
frame.grid_rowconfigure(0,weight=1)
self.show_frame(A)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class A(tk.Frame):
def __init__(self,parent, controller):
tk.Frame.__init__(self, parent, bg='grey')
columns = ('ID', 'First Name', 'Last Name', 'Email')
self.tree = ttk.Treeview(self, columns=columns, show='headings', height=10, selectmode='browse')
self.tree.place(x=100, y=400)
#Add Headings
for i in range(len(columns)):
self.tree.heading(columns[i], text=columns[i])
#Configure column sizes
for i in range (len(columns)):
self.tree.column(columns[i], width=141)
recs = [[1,2,3,4], [1,2,3,4]]
for row in recs:
self.tree.insert('', tk.END, values=row)
self.button = ctk.CTkButton(master=self,
text='Next page',
command=lambda:controller.show_frame(B))
self.button.place(x=100, y=400)
class B(tk.Frame):
def __init__(self,parent, controller):
tk.Frame.__init__(self, parent, bg='grey')
columns = ('ID', 'First Name', 'Last Name', 'Email')
self.tree = ttk.Treeview(self, columns=columns, show='headings', height=10, selectmode='browse')
self.tree.place(x=100, y=400)
#Add Headings
for i in range(len(columns)):
self.tree.heading(columns[i], text=columns[i])
#Configure column sizes
for i in range (len(columns)):
self.tree.column(columns[i], width=141)
recs = [[6,7,8,9], [1,2,3,4]]
for row in recs:
self.tree.insert('', tk.END, values=row)
self.button = ctk.CTkButton(master=self,
text='Prev page',
command=lambda:controller.show_frame(A))
self.button.place(x=100,y=400)
if __name__ == '__main__':
testWindow= Example()
testWindow.mainloop()
На моем ноутбуке:
Как это должно выглядеть:
@BryanOakley Извините, моя ошибка. Теперь я включил больше деталей, а также воспроизводимый пример.
Что означает «кнопки отображаются в правильных координатах, а древовидные представления — нет». иметь в виду? Где вы ожидаете увидеть дерево? Вы помещаете кнопку и древовидную структуру в одни и те же координаты, поэтому неясно, почему вы думаете, что они должны быть в разных местах.
@BryanOakley Я добавил картинки, чтобы было понятнее. Я запустил одну и ту же программу на двух разных компьютерах: один — мой ноутбук (первое изображение, расположение дерева в неправильных координатах), а другой — другой компьютер, показывающий, как это должно выглядеть.
Значит, вы намеренно закрываете колонку ID
своей кнопкой? Помимо этого, смотрели ли вы настройки масштабирования на своих компьютерах? Независимо от того, какое разрешение экрана, многие компьютеры имеют параметр масштаба, который не установлен на 100% по умолчанию.
@Rory Да, в то время я думал, что людям будет легче увидеть, насколько сместилось древовидное представление, если я поставлю маркер на его исходное место. Но да, масштабирование, похоже, было проблемой. Мой был установлен на 150%. Спасибо!
Решение:
Убедитесь, что масштабирование (System>Display>Scale) установлено на 100%.
Пожалуйста, отредактируйте свой вопрос, включив в него минимальный воспроизводимый пример. "неправильные координаты" - бесполезное описание. Отклоняется на 1 пиксель? 10? 100? 1000? какая-то случайная сумма?