Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
 
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
1

Почему не растягивается форма?

27.04.2019, 13:50. Просмотров 378. Ответов 20

Здравствуйте. Мне заказчик прислал проект где форма, она создается через tkinter и называется root. Проблема в том, что у заказчика она растягивается и там справа появляются кнопки и другие элементы управления, у меня же из-за того, что форма не растягивается я просто не вижу этих компонентов и не могу растянуть форму, она как-бы ограничивается каким-то значением, т.е. ее меньше можно сделать, а больше нельзя.
В чем причина и как ее решить?

Добавлено через 30 минут
Эту проблему решил. Как теперь в ListBox добавить символ "\t" или его аналог в строку с текстом, которая потом помещается в ListBox?

Добавлено через 1 час 11 минут
Как сделать шрифт "Courier" - "Моноширинный" в Listbox-e?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2019, 13:50
Ответы с готовыми решениями:

Форма не растягивается больше чем на 20490 на 11520
Как растянуть визуально а не программно скроллом ? Это реально ?

При запуске форма растягивается во всю ширину
При редактировании проекта форма имеет размеры 200х500, но при запуске программы растягивается во...

Форма растягивается на весь экран, как задать фиксированный размер?
autoresize -no :gscratch:

Почему TextBox не растягивается?
Подскажите пожалуйста почему TextBox упорно не хочет растягиваться? <DockPanel...

Почему сайт растягивается?
Как сделать чтобы сайт во всех расширениях монитора был одинаковый не растягивался? Спасибо. ...

20
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 15:02 2
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Как сделать шрифт "Courier" - "Моноширинный" в Listbox-e?
есть tkinter.font, можно переменной задать шрифт и при создании виджета передать этот шрифт font=
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 15:53  [ТС] 3
Эту проблему решил. Как теперь добавить горизонтальную полосу прокрутки к Listbox?
0
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 16:02 4
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from tkinter import *
 
window = Tk()
window.geometry("680x500")
 
Label(window, text="Top label").pack()
 
frame = Frame(window)
frame.pack()
 
listNodes = Listbox(frame, width=20, height=20, font=("Helvetica", 12))
listNodes.pack(side="left", fill="y")
 
scrollbar = Scrollbar(frame, orient="vertical")
scrollbar.config(command=listNodes.yview)
scrollbar.pack(side="right", fill="y")
 
listNodes.config(yscrollcommand=scrollbar.set)
 
for x in range(100):
    listNodes.insert(END, str(x))
 
Label(window, text="Bottom label").pack()
 
window.mainloop()
0
27.04.2019, 16:02
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 16:08  [ТС] 5
Это обязательно через Frame делать? Без фрейма можно?

Добавлено через 1 минуту
У меня щас ScrollBar внизу формы.
0
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 16:13 6
Можно и без фрейма, главное чтобы scrollbar был справа от ListBox
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 16:31  [ТС] 7
У Вас вертикальная полоса ScrollBar. Для горизонтальной напишите, пожалуйста, что-то ничего у меня не получается. ScrollBar вечно прыгает по всей форме, но никак не на своем месте.
0
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 16:42 8
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from tkinter import *
 
window = Tk()
window.geometry("680x500")
 
Label(window, text="Top label").pack()
 
frame = Frame(window)
frame.pack()
 
listNodes = Listbox(frame, width=20, height=20, font=("Helvetica", 12))
listNodes.pack(side="top", fill="y")
 
scrollbar = Scrollbar(frame, orient="horizontal")
scrollbar.config(command=listNodes.xview)
scrollbar.pack(side="bottom", fill="x")
 
listNodes.config(xscrollcommand=scrollbar.set)
 
lst = ['x', 'y', 'z']
for x in lst:
    listNodes.insert(END, ''.join([x * 30]))
 
Label(window, text="Bottom label").pack()
 
window.mainloop()
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 16:43  [ТС] 9
Почему вот так получается?
Все вроде правильно делаю - они прыгают туда-сюда.
0
Изображения
 
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 16:47 10
Как они позиционируются на форме?
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 16:52  [ТС] 11
Вот код. Что не так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root = Tk()
root.title("Товарный лист")
root.geometry('1600x600')
CreateButton(root, "Открыть файл с данными", 215, 30, 800, 6, LoadEventProc)  #1080
 
frame = LabelFrame(root, text="Верх")
frame.pack()
 
ListBoxControl = CreateListBox(frame, 700, 500, 10, 6)
 
 
ListBoxControl.pack(side = "top", fill = "y")
 
 
ListBoxControl.config(font = 'Courier')
 
scrollbar = Scrollbar(frame, orient = HORIZONTAL, command = ListBoxControl.xview)
 
 
scrollbar.pack(side = "top", fill = "x")
 
 
ListBoxControl.config(xscrollcommand = scrollbar.set)
scrollbar.config(command = ListBoxControl.xview)
При этом коде они как на картинке выше.
Что не так? Как исправить проблему?
0
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 16:59 12
У вас оба виджета упакованы в top, у одного должно быть bottom
Python
1
2
ListBoxControl.pack(side = "top", fill = "y")
scrollbar.pack(side = "top", fill = "x")
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 17:10  [ТС] 13
Сейчас вот так.
Суть в том, что когда я не ставлю команду ListBoxControl.pack(side = "top", fill = "y") для ListBox-a, т.е. когда я комментирую ее, то ListBox раскрывается как надо - по координатам, а когда пишу ListBoxControl.pack(side = "top", fill = "y"), т.е. раскомментирую его, то ListBox съеживается становится узки и вылетает наверх, как на 2-ух картинках выше.
Как сделать чтобы все по-нормальному было?
ScollBar постоянно зависает внизу формы по всей ширине.
Вот это тоже неплохо-бы исправить. Еще ниразу не видел ScrollBar вплотную к ListBox-у снизу.
Вот это как все сделать по-нормальному?
0
Миниатюры
Почему не растягивается форма?  
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 17:20 14
Для ListBox нужно сделать ListBoxControl.pack(side = "top", fill = "both")

Создаете Frame,
frame = LabelFrame(root)
потом создаете ListBox и scrollbar и у них родительским элементом указываете фрейм
ListBoxControl = ListBox(frame, ....)
scrollbar = Scrollbar(frame, ....)

у остальных виджетов на форме, родительский элемент должен быть другой, не frame, root или другой фрейм, затем фрейм располагаете на форме как надо
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 17:30  [ТС] 15
Цитата Сообщение от tooru Посмотреть сообщение
затем фрейм располагаете на форме как надо
- что это значит? Задать ему координаты? Ширину и высоту? Напишите код, пожалуйста.
И это нужно делать после создания всех лэйблов и полей редактирования справа?
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 17:33  [ТС] 16
Почему-то ListBox никак не залазиит в frame. Сегодня я еще ниразу не видел, чтобы он был во фрейме.
В чем причина и как исправить?
0
Миниатюры
Почему не растягивается форма?  
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 17:45 17
Вот тут с двумя фреймами

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from tkinter import *
 
window = Tk()
window.geometry("680x500")
 
lframe = Frame(window)
lframe.pack(side='right', fill="both")
Label(lframe, text="Top label").pack()
Label(lframe, text="Bottom label").pack(side="bottom")
 
frame = Frame(window)
frame.pack(fill="both")
 
listNodes = Listbox(frame, width=20, height=25, font=("Helvetica", 12))
listNodes.pack(side="top", fill="x")
 
scrollbar = Scrollbar(frame, orient="horizontal")
scrollbar.config(command=listNodes.xview)
scrollbar.pack(side="bottom", fill="x")
 
listNodes.config(xscrollcommand=scrollbar.set)
 
lst = ['x', 'y', 'z']
for x in lst:
    listNodes.insert(END, ''.join([x * 400]))
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 17:54  [ТС] 18
Нет, со вторым фреймом еще гораздо хуже. Давайте с 1-им фреймом и root.

Добавлено через 23 секунды
Щас картинка как в 13 сообщении.

Добавлено через 2 минуты
Почему ListBox не создается во фрейме? Ведь я указываю фрейм:
Python
1
2
3
4
5
frame = LabelFrame(root, text="Верх")
frame.pack(side = "top", fill="y")
 
ListBoxControl = CreateListBox(frame, 700, 500, 10, 6)
ListBoxControl.pack(side = "top", fill = "y")
0
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 896
27.04.2019, 17:58 19
Python
1
2
frame.pack(side = "top", fill="both")
ListBoxControl.pack(side = "top", fill = "both")
0
FFPowerMan
140 / 183 / 80
Регистрация: 11.10.2018
Сообщений: 1,273
27.04.2019, 18:16  [ТС] 20
Получается как на картинке в 16 сообщении.

Добавлено через 9 минут
Почему так плохо работает размещение? Компоненты справа мешают что-ли?
0
27.04.2019, 18:16
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2019, 18:16

Почему не растягивается ul на высоту вложенных элементов
Добрый день. Подскажите где косяк: http://jsfiddle.net/nFJ98/5/ <div id="top_menu"> <ul> ...

Почему ссылка растягивается на всю ширину?
Привет. Почему-то ссылка form_link растягивается на всю ширину и никак не хочет становиться...

Почему ширина растягивается в одну сторону
При hover на каком-то из трех элементов его ширина тянется в правую сторону, а нужно, чтобы во все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru