Найти - Пользователи
Полная версия: Окна Tk не вписываются в экран
Начало » GUI » Окна Tk не вписываются в экран
1
vanvanov
Мне надо создать 3 окна Tkinter с кнопкой в конце
Есть примерно такой скрипт:

#!/usr/bin/python3
import tkinter as tk
def callback_sel():
	top.destroy()
root=tk.Tk()
top=tk.Toplevel(root)
# frames
frame1=tk.Frame(top)
frame2=tk.Frame(top)
frame3=tk.Frame(top)
# text widgets
txt1=tk.Text(frame1)
txt2=tk.Text(frame2)
txt3=tk.Text(frame3)
# button
button=tk.Button(frame3,text='Выделенное',command=callback_sel)
button.bind('<Return>', lambda e: callback_sel())
button.pack(side='bottom')
# pack text widgets
txt1.pack()
txt2.pack()
txt3.pack()
# pack frames
frame1.pack()
frame2.pack()
frame3.pack()
top.wait_window()
root.mainloop()
На большом мониторе все отображается, хотя и не очень красиво (фреймы имеют разный размер), а вот когда я пробую тот же скрипт на нетбуке, то создаваемое окно просто не вписывается в экран (видны только 2 фрейма, приходится тянуть за границу окна, чтобы увидеть 3-й фрейм). Можно ли это как-нибудь обойти и сделать так, чтобы масштабировалось до пределов экрана при любом разрешении (желательно, оставив метод pack)?
Shaman
Проблема из-за использования настроек по умолчанию для Text.
http://younglinux.info/tkinter/text.php
4kpt_II
Можно получить размеры экрана и использовать их для определения размеров базового root.
Изменить root можно методом root.geometry(“400х400+100+100”)
Получить размеры экрана можно методом root.winfo_screenwidth() и root.winfo_screenheight().
Только желательно эти размеры, при отображении уменьшить на 4 пикселя. Использование полноэкранного размера в винде иногда вызывает ошибку.

P.S. Будут вопросы - пишите…
vanvanov
Shaman
Проблема из-за использования настроек по умолчанию для Text.http://younglinux.info/tkinter/text.php
Большое спасибо! Помогло явное проставление height для Text. Сделал так:

#!/usr/bin/python3
import tkinter as tk
def callback_sel():
	top.destroy()
root=tk.Tk()
top=tk.Toplevel(root)
top.attributes('-zoomed',True)
frame1=tk.Frame(top)
frame2=tk.Frame(top)
frame3=tk.Frame(top)
txt1=tk.Text(frame1,height=15,wrap='word')
txt2=tk.Text(frame2,height=15,wrap='word')
txt3=tk.Text(frame3,height=15,wrap='word')
# button
button=tk.Button(frame3,text='Выделенное',command=callback_sel)
button.bind('<Return>', lambda e: callback_sel())
button.pack(side='bottom')
# pack text widgets
txt1.pack(expand='yes',fill='both')
txt2.pack(expand='yes',fill='both')
txt3.pack(expand='yes',fill='both')
frame1.pack(expand='yes',fill='both')
frame2.pack(expand='yes',fill='both')
frame3.pack(expand='yes',fill='both')
top.wait_window()
root.mainloop()
vanvanov
4kpt_II
Можно получить размеры экрана и использовать их для определения размеров базового root.Изменить root можно методом root.geometry(“400х400+100+100”)Получить размеры экрана можно методом root.winfo_screenwidth() и root.winfo_screenheight().Только желательно эти размеры, при отображении уменьшить на 4 пикселя. Использование полноэкранного размера в винде иногда вызывает ошибку.P.S. Будут вопросы - пишите…
Я уже пробовал менять geometry для окна. При этом размер окна действительно менялся, но виджет в него не влезал
4kpt_II
Ну так задайте размер виджета.
Можно предварительно узнать его размер и уменьшить в случае необходимости.
zoomed это костыль. Если программа должна отображаться не на весь экран?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB