Исправить размер текстового виджета - PullRequest
0 голосов
/ 23 июня 2018

Я подал заявку, и часть ее включает в себя ввод вопроса и ответа.У меня есть этот код:

import tkinter as tk
root = tk.Tk()
root.geometry("500x250")

#Main question/answer frame
createFrm = tk.Frame(root)
createFrm.pack(expand = True) #To centre the contents in the window


#Create question entry area
cnqFrm = tk.Frame(createFrm)
cnqFrm.pack()
cnqFrm.pack_propagate(False)

#Question entry
cnqLabQ = tk.Label(cnqFrm, text = "Question")
cnqLabQ.grid(column = 0, row = 0)
#Frame for question Text
cnqTxtQFrm = tk.Frame(cnqFrm, height = 100, width = 100)
cnqTxtQFrm.grid(column = 0, row = 1)
cnqTxtQFrm.grid_propagate(False)
#Question Text
cnqTxtQ = tk.Text(cnqTxtQFrm)
cnqTxtQ.pack()
cnqTxtQ.pack_propagate(False)

#Answer entry
cnqLabA = tk.Label(cnqFrm, text = "Answer")
cnqLabA.grid(column = 1, row = 0)
#Frame for answer text
cnqTxtAFrm = tk.Frame(cnqFrm, height = 100, width = 100)
cnqTxtAFrm.grid(column = 1, row = 1)
cnqTxtAFrm.grid_propagate(False)
#Answer Text
cnqTxtA = tk.Text(cnqTxtAFrm)
cnqTxtA.pack()
cnqTxtA.pack_propagate(False)

Несмотря на то, что виджет Текст находится во фрейме с grid_propagate(False) и фиксированной высоты и ширины, а сам виджет Текст имеет pack_propagate(False), он все еще расширяется добольше, чем должно быть.Почему это и как я могу это исправить?

1 Ответ

0 голосов
/ 23 июня 2018

Вы не предоставляете текстовому виджету явный размер, поэтому по умолчанию он равен 40x80 символов среднего размера.Наиболее распространенный способ принудительного присвоения ему определенного размера, который определяется его родителем, состоит в том, чтобы присвоить ему размер, меньший, чем содержащий виджет, а затем разрешить grid или pack расширять его, чтобы он соответствовал выделенному ему пространству.,Итак, начните с задания текстового виджета шириной и высотой 1 (один).

Далее, в данном конкретном случае вы звоните grid_propagate(False) на содержащем кадре, но вы используете pack для управления окном.Вам следует позвонить pack_propagate, если вы используете pack.Вы также должны указать пакету развернуть текстовый виджет, чтобы заполнить его рамку.

Наконец, нет смысла вызывать cnqTxtQ.pack_propagate(False), поскольку это влияет только на дочерние элементы текстового виджета, и вы не дали ему никаких дочерних элементов.


При всем этом, я настоятельно рекомендую вам не использовать grid_propagate(False) и pack_propagate(False).Tkinter действительно хорош в организации виджетов.Вместо того, чтобы пытаться заставить текстовый виджет иметь определенный размер в пикселях, установите текстовый виджет на желаемый размер в строках и символах, и пусть tkinter разумно организует все остальное, чтобы соответствовать им.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...