2015-02-15 3 views
1

У меня есть программа python tkinter, и у меня есть два текстовых виджета, которые должны быть бок о бок. Как я могу заставить два виджета заняться ровно половиной окна, которое составляет 400 x 400 пикселей?Текстовый виджет, чтобы заполнить половину экрана

Мой код здесь

import tkinter 

class MyApp: 
    def __init__(self): 
     self.root = tkinter.Tk() 
     self.root.title("App") 
     self.root.geometry("400x400") 
     self.root.update() 
     self.box1Text = tkinter.Text(self.root) 
     self.box1Text.pack(fill=tkinter.BOTH,side=tkinter.LEFT) 
     self.box2Text = tkinter.Text(self.root) 
     self.box2Text.pack(fill=tkinter.BOTH,side=tkinter.RIGHT) 

App = MyApp() 
+0

использование 'заливка = BOTH'. И показать нам свой код, пожалуйста, – ForceBru

+0

я попробовал 'заполнить = BOTH' и' расширить = 1', но один занимает больше, чем другие @ForceBru –

+0

'импорта Tkinter класса MyApp: Защиту __init __ (Я): самостоятельно .root = tkinter.Tk() self.root.title ("приложение") self.root.geometry ("400x400") self.root.update() \t \t self.box1Text = tkinter.Text (само .root) \t self.box1Text.pack (заполнить = tkinter.BOTH, боковые = tkinter.LEFT) \t self.box2Text = tkinter.Text (self.root) \t self.box 2Text.pack (fill = tkinter.BOTH, side = tkinter.RIGHT) ' –

ответ

4

По умолчанию текстовый виджет хочет быть шириной 80 символов на 24 символа. Если вы не укажете размер, tkinter сделает все возможное, чтобы убедиться, что виджет такого размера. Если он не может соответствовать всем виджетам по их запрошенному размеру, он начнет сокращать виджеты, начиная с созданного последнего виджета. Вот почему первый виджет занимает все (или большинство) окна - tkinter пытается отобразить его, а затем предоставит оставшуюся часть следующего виджета. В этом случае нулевое расстояние осталось.

Поскольку вы придаете окну явный размер, вы можете дать текстовому виджету ширину и высоту 1 (один), а затем позволить диспетчеру геометрии развернуть виджет, чтобы заполнить дополнительное пространство. Вам также нужно сообщить пакет, чтобы позволить виджету расшириться. Итак, добавьте width=1, height=1 в определение виджетов, а затем добавьте expand=True при упаковке виджетов в фрейме.

Вот рабочий пример:

import tkinter 

class MyApp: 
    def __init__(self): 
     self.root = tkinter.Tk() 
     self.root.title("App") 
     self.root.geometry("400x400") 
     self.root.update() 
     self.box1Text = tkinter.Text(self.root, width=1, height=1) 
     self.box1Text.pack(fill=tkinter.BOTH,side=tkinter.LEFT, expand=True) 
     self.box2Text = tkinter.Text(self.root, width=1, height=1) 
     self.box2Text.pack(fill=tkinter.BOTH,side=tkinter.RIGHT, expand=True) 

App = MyApp() 
App.root.mainloop() 
+0

, спасибо, что это сработало отлично! –

+0

Как я могу установить его для заполнения всего экрана, сохраняя при этом прокрутку? –

-1

Вам нужно добавить width=200, height=400 каждому инициализаторе, как это.

self.box1Text = tkinter.Text(self.root, height=400, width=200) 
self.box2Text = tkinter.Text(self.root, height=400, width=200) 
+1

Это сделает текстовые виджеты 400 _characters_ tall и 200 _characters_ wide –

Смежные вопросы