Ширина виджета текста Tkinter не соответствует комбинированной ширине двух кнопок, несмотря на пропорциональные расчетыPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ширина виджета текста Tkinter не соответствует комбинированной ширине двух кнопок, несмотря на пропорциональные расчеты

Сообщение Anonymous »

Я создаю графический интерфейс Tkinter, где я хочу, чтобы виджет черного текста (Message_entry) была точно такой же шириной, что и комбинированная ширина двух горизонтальных кнопок. Я использую пропорции размера экрана, чтобы установить ширину виджетов, но на разных экранах (с разными разрешениями или DPI) текстовый виджет в конечном итоге становится либо более широким, либо более узким, чем две кнопки объединены. < /P>
Важно: я не хочу использовать expand = true или заполнять свои макеты, потому что я не хочу, чтобы виджет текста растягивался и заполнял все доступное пространство - просто соответствует двум кнопкам.
Вот точный код, который у меня есть: < /p>

Код: Выделить всё

import tkinter as tk
from tkinter import ttk

root = tk.Tk(className="Chat")

root.title("Chat")

# Maximize the window
root.wm_state('zoomed')

# Get the screen width and height
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

def proportion_height(p):
return int(screen_height * p)

def proportion_box_width(p):
box_width = int(screen_width * p)
print("Box width is ", box_width)

box_width = int(box_width / 2)
print("Box width after devide is ", box_width)
return box_width
# Proportional calculations
def proportion_width(p):
return int(screen_width * p)

frame1 = tk.Frame(root, bg='white')
frame1.pack(side='bottom', padx=(proportion_width(0.22),0), pady=(proportion_height(0.1), 1), anchor='w')

frame2 = tk.Frame(root, bg='white')
frame2.pack(

before=frame1,
side='bottom',
padx=(proportion_width(0.22),0),
pady=(proportion_height(0), 5),
anchor='w'
)

# Frame to contain message_entry and buttons
frame_for_widgets = tk.Frame(root, bg='white')
frame_for_widgets.pack(
padx=(proportion_width(0.22),0),
anchor='w',
before=frame2,
pady=(0, proportion_height(0.02)),
side='bottom',
)

style = ttk.Style()
style.configure("def2.TButton", font=('Helvetica', 14,), background='white', fg='white', highlightthickness=1, highlightbackground="gray", borderwidth=1)

chat_with_pdf_button = ttk.Button(frame1, width=proportion_box_width(0.04), text="Chat with PDF", style="def2.TButton",)

chat_with_pdf_button.pack(side='left', expand=False, ipady=proportion_height(0.01))

# Create a button to trigger the summarization process
summarize_button = ttk.Button(frame1, width=proportion_box_width(0.04), text="Chat with a YouTube video", style="def2.TButton")
summarize_button.pack(side='right', expand=False, padx=(proportion_height(0.01), 0), ipady=proportion_height(0.01))

letter_button = ttk.Button(frame2, width=proportion_box_width(0.04), text="Write a letter", style="def2.TButton")
letter_button.pack(side='left',expand=False, ipady=proportion_height(0.01))

blog_button = ttk.Button(frame2, width=proportion_box_width(0.04), text="Chat with a Blog Post",  style="def2.TButton")
blog_button.pack(side='right',expand=False, padx=(proportion_height(0.01), 0), ipady=proportion_height(0.01))

message_entry = tk.Text(
frame_for_widgets,
width=proportion_width(0.04),
bg='black',
insertbackground='black',
fg='black',
borderwidth=0,
# Removing fixed width and height, so it expands with the frame
height=proportion_width(0.000001),
# Set a fixed height if needed
spacing1=proportion_height(0.02),  # Adjust spacing1 proportionally
spacing3=proportion_height(0.02),  # Adjust spacing3 proportionally
font=('Helvetica', 14)
)

# Pack message_entry into frame2
message_entry.pack(side='left', expand=False)

# Send button
send_button = ttk.Button(frame_for_widgets)
send_button.pack(side='left',
expand=False,
padx=(proportion_width(0.001),0),
pady=(proportion_height(0.02), proportion_height(0.02)),)

send_button.pack_configure(expand=False)

style = ttk.Style()
style.configure("TMenubutton", background="white", borderwidth=0, font=('Helvetica', 14),)  # Set background color, reduce border thickness, set font, and set text color
menu_button = ttk.Menubutton(frame_for_widgets, text="Select", direction='above',)  # Set "Option 1" as the initial text
menu_button.pack(side=tk.LEFT, pady=(proportion_height(0.02), proportion_height(0.02)), expand=False)

root.mainloop()
Вот как это выглядит на моем экране
моя цель:
Сделайте message_entry иметь точно такую ​​же ширину, что и сумма ширины CHAT_WITH_PDF_BUTTON и Summarize_button, независимо от разрешения экрана пользователя или DPI. < /P>
Избегайте Использование expand = true или заполнить, потому что я не хочу, чтобы виджет заполнял все окно, просто чтобы соответствовать ширине кнопки. Ширины в разных разрешениях экрана без использования или заполнения.

Подробнее здесь: https://stackoverflow.com/questions/794 ... idgets-des
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»