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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строка состояния главного окна, Tkinter 
:(
    Опции темы
Young
Дата 11.9.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 9.9.2005

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



Как можно сделать строку состояния у главного окна на Tk? Просьба дать пример кода или ссылочку... Пользуюсь книжками "Практическое программирование Tcl и Tk" (Б.Уэлш, К.Джонс) и "Программирование на Python" (М.Лутц). В этих книжках не нашёл smile
PM MAIL WWW   Вверх
setq
Дата 11.9.2005, 19:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











строка состояния? я такого виджета не помню... что конечно не значит, что его нет. может посмотреть в самом Tkinter?

я бы наверно просто прикрепил внизу label.
  Вверх
Young
Дата 11.9.2005, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 9.9.2005

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



Цитата
я бы наверно просто прикрепил внизу label
Я уже так и сделал smile Однако, есть проблемы... Вот этот код не работает:
Код
StatusText = unicode("Готово", "CP1251")
StatusBar = Label(MainWnd, relief = "sunken", textvariable = StatusText)
StatusBar.pack(side = BOTTOM, expand = YES, fill = X, anchor = SW, pady = (2,0))
Метка отрисовывается как надо, но текста в ней нет smile Кстати, если использовать
Код
StatusBar = Label(MainWnd, relief = "sunken", text = StatusText)
то текст есть, но выровнять его по левому краю у меня не получается - текст отображается почему-то по центру smile
PM MAIL WWW   Вверх
grock
Дата 12.9.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

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




Код

        self.statusbar = Label(self.root, relief=SUNKEN, border=1, anchor = W)
#                                                                                                           ^^^ 
        self.statusbar.pack(side=TOP, fill=X)


обновлять можно так
Код

    def status(self, text):
        self.statusbar['text'] = text
        self.root.update()


или через textvariable

А вообще скачай родную доку по Tkinter-у и не парься
PM MAIL   Вверх
setq
Дата 12.9.2005, 13:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











textvariable? ...

может имеется в виду Tk'евская переменная (AKA Variable) ? это не просто текст, а особый объект с методами get() и set()
  Вверх
grock
Дата 12.9.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

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



да я это имел ввиду, но т.к. человек это уже знает (см. первое сообщение), я не стал вдаваться в подробности
Добавлено @ 13:45
Young Да, кстати, не обязательно писать так :

Код

StatusText = unicode("Готово", "CP1251")


Можно вот так:
Код

# -*- coding: cp1251 -*-
# ^^^^^^ Должна быть первой строкой кода
StatusText = u"Готово"


PM MAIL   Вверх
Young
Дата 12.9.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 9.9.2005

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



(All) Спасибо, более-менее разобрался.
Раз зашла речь о кодировках, хочу спросить:
Код
unicode("Великий и могучий", "CP1251"))
под *nix будет работать?
И ещё: всё-таки не удаётся выровнять текст в метке по левому краю... Прошу отнестись снисходительно, т.к. я пока плаваю в Tk (да и в Python вообще) очень сильно... Вот код:
Код
from Tkinter import *
MainWnd = Tk()
StatusBar = Label(MainWnd, relief = SUNKEN, text = unicode("Готово", "CP1251"), justify = "left")
StatusBar.pack(side = BOTTOM, expand = YES, fill = X, anchor = SW, pady = (2,0))
MainWnd.mainloop()
Нужно, чтобы текст выравнивался по левому краю, а он выравнивается по центру smile
PM MAIL WWW   Вверх
setq
Дата 12.9.2005, 15:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ок. тогда может прикрепить внизу Frame, а на него "наклеить" Label?
  Вверх
Young
Дата 12.9.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 9.9.2005

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



Цитата
тогда может прикрепить внизу Frame, а на него "наклеить" Label?
(setq) Не понял, а какая связь с выравниванием текста в Label?
PM MAIL WWW   Вверх
setq
Дата 12.9.2005, 16:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Frame цепляешь внизу окна, а Label - слева внутри Frame'а. наверно так.
  Вверх
grock
Дата 12.9.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

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



балин, я же написал, anchor = W, в атрибутах лейбла решит твои проблемы
PM MAIL   Вверх
Young
Дата 12.9.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 9.9.2005

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



(setq) Получилось только так:
Код
from Tkinter import *
MainWnd = Tk()
Frm = Label(MainWnd, relief = SUNKEN)
Frm.pack(side = BOTTOM, anchor = SW, expand = YES, fill = X, pady = (2,0))
StatusBar = Label(Frm, text = unicode("Готово", "CP1251"))
StatusBar.pack(side = LEFT)
MainWnd.mainloop()
Хотя я не знаю, метка в метке - это нормальный приём? С фреймом не получается...
(grock) anchor = W в атрибутах лейбла НЕ решает проблемы, текст всё равно выходит по центру...
PM MAIL WWW   Вверх
grock
Дата 12.9.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.8.2005
Где: Санкт - Петербург

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



и все-таки, какой-ты невнимательный, я же все написал выше:


добавь в pack у своего лейбла статусбара fill = x

Код

        statusbar = Label(w, text = "status", relief=SUNKEN, border=1, anchor = W)
        statusbar.pack(side=BOTTOM, fill=X)

Так тебе никаких фреймов не надо
PM MAIL   Вверх
setq
Дата 12.9.2005, 17:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











метка в метке это наверно не нормально, наверно потому что для этих целей есть Frame. но это моё сугубо личное мнение. потому что если ты захочешь создать кнопку внутри кнопки, то ничто тебе не помешает это сделать.

лично у меня следующий код работает:
Код
# -*- coding: cp1251 -*-

from Tkinter import *
root = Tk ()
f = Frame (root)
f.pack (side=BOTTOM, fill=X, expand=YES)
l = Label (f, text=u'Boo')
l.pack (side=LEFT)
root.mainloop ()

опять же работает и способ grock.
  Вверх
Young
Дата 12.9.2005, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 9.9.2005

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



Всё, допёрло... Я "anchor" добавлял в pack() вместо конструктора, асёл...
(All) Всё работает, спасибо!
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




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


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

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