Я создаю графический интерфейс 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 или заполнить, потому что я не хочу, чтобы виджет заполнял все окно, просто чтобы соответствовать ширине кнопки. Ширины в разных разрешениях экрана без использования или заполнения.
Я создаю графический интерфейс Tkinter, где я хочу, чтобы виджет черного текста (Message_entry) была точно такой же шириной, что и комбинированная ширина двух горизонтальных кнопок. Я использую пропорции размера экрана, чтобы установить ширину виджетов, но на разных экранах (с разными разрешениями или DPI) текстовый виджет в конечном итоге становится либо более широким, либо более узким, чем две кнопки объединены. < /P> Важно: я не хочу использовать expand = true или заполнять свои макеты, потому что я не хочу, чтобы виджет текста растягивался и заполнял все доступное пространство - просто соответствует двум кнопкам. Вот точный код, который у меня есть: < /p> [code]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()
# 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)
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() [/code] Вот как это выглядит на моем экране [b] моя цель: [/b] Сделайте message_entry иметь точно такую же ширину, что и сумма ширины CHAT_WITH_PDF_BUTTON и Summarize_button, независимо от разрешения экрана пользователя или DPI. < /P> Избегайте Использование expand = true или заполнить, потому что я не хочу, чтобы виджет заполнял все окно, просто чтобы соответствовать ширине кнопки. Ширины в разных разрешениях экрана без использования или заполнения.
Я создаю графический интерфейс Tkinter, где я хочу, чтобы виджет черного текста (Message_entry) была точно такой же шириной, что и комбинированная ширина двух горизонтальных кнопок. Я использую пропорции размера экрана, чтобы установить ширину...
В частности, я хотел сделать два поля со списком и кнопку. наряду с 8 другими виджетами для переключения, в 8 «местах» виджетов (конкретных областях, куда я помещаю виджеты)
первая комбинация переключает место, а вторая переключает виджет. кнопка...
В частности, я хотел сделать два поля со списком и кнопку. наряду с 8 другими виджетами для переключения, в 8 «местах» виджетов (конкретных областях, куда я помещаю виджеты)
первая комбинация переключает место, а вторая переключает виджет. кнопка...