Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размер/положение эл. управления, Python+tkinter 
:(
    Опции темы
Nastya
Дата 1.6.2005, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: нет
Всего: 44



Привет, только начала заниматся питоном и сразу же совместно с Tkinter, так что прошу прощения заглупые вопросы.
Как позиционируются элементы управления (в часности Button).
Почему если я устанавливаю элементы управления не на форму а на фрайм меняется размер фрейма, до минимально возможного?
Код

class SensorBut (Button):
    ItemData =0
    State = StateSensorInactive
    def __init__ (self, numb, master=None):
    Button.__init__(self, master)   
        self.grid()                    
    self.ItemData  = numb;
    def SetSensorState(self,state):
    self.State = state;
    
root = Tk()
# тут всякие мелочи 

#create frame for all window
BigFrame = Frame(root,width =500, height = 700)
BigFrame.config (background = "#000000")
BigFrame.config (borderwidth = 2)
BigFrame.grid()
But = {}
for i in range(10):
    But[i] = SensorBut(1,BigFrame)
    #But[i].

BigFrame.config (width =500)
BigFrame.config (height = 700)
root.mainloop()


Кнопки идут по центру окна, а размер BigFrame минимальный необходимый для их содержания.
Если радителем делаю root, то кнопки идут внизу.
Как мне это все правильно расположить.
Frame, а на нем в определнном положении кнопки ?



--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Nastya
Дата 1.6.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: нет
Всего: 44



Кроме того, объясните по этому поводу следующие моменты:
1. grid (row = , column = ) - Это задется относительно родителя? или относительно окна верхнего уровня
2. width , height (элементов управления, а не окна верхнего уровня) - каковы еденицы измерения, почему они меняются с появлением дочерних элементов, как еденицы измерения задать.



--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
setq
Дата 18.7.2005, 16:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











привет.

1) насколько я понимаю, это причуды geometry managers таких как pack () и grid (). на самом деле стоит почитать литературу и разобраться в том как они работают, но если у тебя нет на это времени, то используй manager place ().
Код
>>> from Tkinter import *
>>> print Button.place.__doc__
Place a widget in the parent widget. Use as options:
        in=master - master relative to which the widget is placed.
        x=amount - locate anchor of this widget at position x of master
        y=amount - locate anchor of this widget at position y of master
        relx=amount - locate anchor of this widget between 0.0 and 1.0
                      relative to width of master (1.0 is right edge)
        rely=amount - locate anchor of this widget between 0.0 and 1.0
                      relative to height of master (1.0 is bottom edge)
        anchor=NSEW (or subset) - position anchor according to given direction
        width=amount - width of this widget in pixel
        height=amount - height of this widget in pixel
        relwidth=amount - width of this widget between 0.0 and 1.0
                          relative to width of master (1.0 is the same width
                  as the master)
        relheight=amount - height of this widget between 0.0 and 1.0
                           relative to height of master (1.0 is the same
                   height as the master)
        bordermode="inside" or "outside" - whether to take border width of master widget
                                               into account
из всего этого полезными могут оказаться для тебя например опции x и y.
Код
mybutton = Button (myframe)
mybutton.place (x=100, y=50)
кроме того на своём компьютере нехороший эффект изменения размеров myframe я не наблюдал.

возможно это именно то что тебе и нужно.

2) опции grid:
Код
>>> from Tkinter import *
>>> print Button.grid.__doc__
Position a widget in the parent widget in a grid. Use as options:
        column=number - use cell identified with given column (starting with 0)
        columnspan=number - this widget will span several columns
        in=master - use master to contain this widget
        ipadx=amount - add internal padding in x direction
        ipady=amount - add internal padding in y direction
        padx=amount - add padding in x direction
        pady=amount - add padding in y direction
        row=number - use cell identified with given row (starting with 0)
        rowspan=number - this widget will span several rows
        sticky=NSEW - if cell is larger on which sides will this
                      widget stick to the cell boundary
как видим "располагает widget в родительском widget'е..."

3) если я не ошибаюсь, единицы измерения всегда pixels. хотя кажется есть две функции, которые возвращают высоту и ширину экрана в миллиметрах, но я не знаю, нужно тебе это или нет.

4) вопросы вовсе не глупые. они же по делу.

5) прости, за долгое ожидание ответа. я только сегодня открыл твою тему. %(

6) кстати, в Tkinter ввели новую нотацию для configure (). теперь можно писать
Код
widg ['option'] = value
вместо
Код
widg.config (option = value)
не знаю с какой версии.

7)ты уверена, что хотела написать именно
Код
class SensorBut (Button):
    ItemData =0 # объявление переменной КЛАССА
    def __init__ (self, numb, master=None):
    Button.__init__(self, master)   
        self.grid()
        self.ItemData  = numb; # экземпляр перекрывает переменную класса СВОЕЙ СОБСТВЕННОЙ
объявлять переменные на уровне класса обычно не нужно. когда ты в конструкторе напишешь
Код
self.var = value
переменная var создастся автоматически. более того, если на уровне класса уже есть переменная var, то новая переменная её НЕ перезапишет и та всё ещё будет доступна под именем classname.var.
Код
>>> class A :
...     x = 13
...     def __init__ (self) :
...         self.x = 7
... 
>>> a = A ()
>>> a.x
7
>>> A.x
13
>>>
своеобразный аналог статических переменных в C++ (если я ничего не путаю). где-то в Net'е была замечательная статья по этому поводу. если кто-нибудь найдёт - выложите пожалуйста ссылку.

8) спрашивай. в седующий раз постараемся отвечать немного быстрее %)
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.