Древовидное представление Tkinter не размещается в правильных координатах

Я поместил виджет дерева в свое окно 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()

На моем ноутбуке:

Как это должно выглядеть:

Пожалуйста, отредактируйте свой вопрос, включив в него минимальный воспроизводимый пример. "неправильные координаты" - бесполезное описание. Отклоняется на 1 пиксель? 10? 100? 1000? какая-то случайная сумма?

Bryan Oakley 05.04.2023 01:27

@BryanOakley Извините, моя ошибка. Теперь я включил больше деталей, а также воспроизводимый пример.

JR RJ 05.04.2023 01:51

Что означает «кнопки отображаются в правильных координатах, а древовидные представления — нет». иметь в виду? Где вы ожидаете увидеть дерево? Вы помещаете кнопку и древовидную структуру в одни и те же координаты, поэтому неясно, почему вы думаете, что они должны быть в разных местах.

Bryan Oakley 05.04.2023 07:23

@BryanOakley Я добавил картинки, чтобы было понятнее. Я запустил одну и ту же программу на двух разных компьютерах: один — мой ноутбук (первое изображение, расположение дерева в неправильных координатах), а другой — другой компьютер, показывающий, как это должно выглядеть.

JR RJ 05.04.2023 14:54

Значит, вы намеренно закрываете колонку ID своей кнопкой? Помимо этого, смотрели ли вы настройки масштабирования на своих компьютерах? Независимо от того, какое разрешение экрана, многие компьютеры имеют параметр масштаба, который не установлен на 100% по умолчанию.

Rory 05.04.2023 20:20

@Rory Да, в то время я думал, что людям будет легче увидеть, насколько сместилось древовидное представление, если я поставлю маркер на его исходное место. Но да, масштабирование, похоже, было проблемой. Мой был установлен на 150%. Спасибо!

JR RJ 06.04.2023 10:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение:

Убедитесь, что масштабирование (System>Display>Scale) установлено на 100%.

Другие вопросы по теме