Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Tkinter. Увеличить размер надписей. И не только. [RSS Feed]

#1 Окт. 26, 2014 21:22:55

Maxim3500
Зарегистрирован: 2014-10-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter. Увеличить размер надписей. И не только.

Суть - мини программа для проверки баланса на интернете. Интерфейс на ткинтере. Кнопка проверить баланс, надпись в которую выводится баланс и кнопка закрыть. Но - надписи на кнопках по сравнению с размерами кнопок крайне малы. Как сделать сами надписи побольше, ибо текущий вариант это максимум что влезло в экран ( ноут 14 дюймов)?
Может нужно использовать другие виджеты?
Также приветствуются любые другие советы по поводу данной программы.
Вот код

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# у лутца написано что в случае с ткинтером импорт всего это нормально. Да и в данном случае это не играет роли
from Tkinter import *
# для закрытия приложения импортируем пакет ниже, если есть что то другое - с радостью буду
# использовать его
import sys
# будем использовать регулярки дабы выцеплять текст из ответа
import re
# Задание переменных для оконного интерфейса
root = Tk()
# переменная для отображения изменяющейся надписи значения баланса
BALANCE = StringVar(value='Неизвестен баланс')
# инициализация и создание кнопок
# шрифт - без разницы какой, его размер и размеры виджетов - максимум что вместилось
btn = Button(
    root, text="Проверить баланс", width=35, height=15, font='arial 18')
lbl = Label(root, textvariable=BALANCE, width=35, height=15, font='arial 18')
btn1 = Button(root, text="Закрыть", width=35, height=15, font='arial 18')
def from_string():
    """
    тестовый метод, возвращает строку в которой есть нужный нам баланс
    """
    stri = """
    <div style='background:#fafafa; border: dotted 1px #555; padding:30px'>
<center>
<br>
    <div style="font-size:16px;float:right;padding-bottom:5px;"><img style="width:16px" src="/data/img/liber/coins.png">&nbsp;Актуальный баланс: <b>35 953, руб.</b></div>
    
    <table border="1" cellspacing="2" cellpadding="2" class="content">
    <tr>        
        <td align="left"  style="background-color: #eeeeee; font-weight: bold;">Абонент</td>
        
    """
    return stri
def balance(page=from_string()):
    """
    функция проверки баланса, возвращает его строковое значение
    """
    # стараемся использовать только юникод.
    # получаем тело ответа для вытягивания оттуда суммы баланса
    bod = page.decode('utf-8')
    # патерн для регулярного выражения. сделан согласно исходникому коду
    # страницы
    pat = ur'баланс: <b>([\d\s\,]*)руб\.</b>'
    # обрезаем строку дабы избавится от лишних символов
    return ''.join([x if x.isdigit() else '' for x in re.findall(pat, bod)[0]])
def wind_run():
    """
    Запуск оконного варианта программы
    """
    # назначение действий
    btn.bind("<Button-1>", lambda x: BALANCE.set(balance()))
    btn1.bind("<Button-1>", lambda x: sys.exit())
    btn.pack(expand=YES, side=LEFT)
    btn1.pack(expand=YES, side=RIGHT)
    lbl.pack(expand=YES)
    root.mainloop()
if len(sys.argv) == 2:
    if sys.argv[1] == '-w':
        wind_run()
    elif sys.argv[1] == '-c':
        print balance()
else:
    print 'Usage:\nfor windowed\n\tpython 123.py -w \nfor console \n\tpython 123.py -c'

код скачки странички с балансом из инета ( для работы кода выше он не нужен, вдруг кому нужно будет просто так)
# можно было что то стандартное - но с грабом примеры были под рукой.
import grab
# логин и пароль, 
LOGIN = '1111111111'
PASSWORD = '111111111'
def from_inet():
    """
    получаем тело страницы с балансом с интернета
    """
    # инициализация
    g = grab.Grab()
    g.go("http://byfly.by/")
    # ввод данных и переход на страницу удобную для получения данных
    g.set_input('oper_user', LOGIN)
    g.set_input('passwd', PASSWORD)
    g.submit()
    g.go('https://issa.beltelecom.by/main.html')
    return g.response.body

Офлайн

#2 Окт. 26, 2014 22:54:10

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter. Увеличить размер надписей. И не только.

Вопрос не понятен. Так выставьте больше шрифт. А лучше скриншот в студию с пояснениями, что Вы хотите

P.S. И по коду. Код жуткий, но хотя-бы обернутый в теги, за что спасибо.

P.S.S. Никогда не делайте from Tkiner import *.

Офлайн

#3 Окт. 27, 2014 10:56:42

Maxim3500
Зарегистрирован: 2014-10-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter. Увеличить размер надписей. И не только.

4kpt_II
А что именно в нем жуткого?.
по поводу скриншота - возможно я уже решил пролему самостоятельно. Если вопрос у меня решился - чуть позже напишу как.

Офлайн

#4 Окт. 27, 2014 14:50:35

Maxim3500
Зарегистрирован: 2014-10-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter. Увеличить размер надписей. И не только.

Проблема все же решена. Вместо того дабы задавать размеры кнопок, просто задал размер окна. Получилось красивее. Вопрос по поводу что же такого жуткого в коде остался.

Офлайн

#5 Окт. 27, 2014 18:04:35

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter. Увеличить размер надписей. И не только.

Ошибок тьма. Основные:
- комментарии где попало и как попало.
- названия виждетов и переменных.
- ООП нет и вряд-ли в ближайшее время будет
- про from tkinter import * уже написал.
- Жуть

lambda x: BALANCE.set(balance())
- так делать не надо
lambda x: sys.exit()
Лучше
lambda event: root.destroy() 
- StringVar используется, но совсем не для того, для чего используете Вы
- Сложно объяснить, какие чувства я испытываю, когда вижу эту строку
def balance(page=from_string()):


P.S. Про PEP8 почитать не помешает на досуге

Офлайн

#6 Окт. 27, 2014 22:32:15

Maxim3500
Зарегистрирован: 2014-10-26
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter. Увеличить размер надписей. И не только.

Хм. Спасибо. По поводу замечаний спасибо, но скажу что не все так плохо как вы думаете, ибо делался данный код на скорую руку, и он одновременно являлся знакомством с ткинтер, хотя это честно говоря плохое оправдание. Что такое PEP8 знаю, но все равно ознакомлюсь полностью. По поводу ООП - тут его нет, так как именно в данном случае оно не нужно абсолютно.

Офлайн

#7 Окт. 27, 2014 23:06:33

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Tkinter. Увеличить размер надписей. И не только.

Maxim3500
По поводу ООП - тут его нет, так как именно в данном случае оно не нужно абсолютно.

Не мелите чушь.

Maxim3500
Что такое PEP8 знаю, но все равно ознакомлюсь полностью.

Рекомендую просто установить нормальную IDLE или подключить к Вашей IDLE соответствующую проверялку. В свое время для простоты юзал напрямую pylint. Сейчас в PyCharm все это делается на лету. Плюс еще PyCharm проверяет не только PEP8 но и разные трудноотлавливаемые гадости

P.S. По-поводу tkinter. Мой Вам совет. Дерните из интернета небольшую книгу от New Mexico Tech. Там есть практически все, что надо по нему знать. От свойств до примеров реализации. Про ООП в tkinter хорошо написал М. Саммерфилд в своей последней книге. Тоже можно пролистать

P.S.S. Для первого кода неплохо.

Отредактировано 4kpt_II (Окт. 27, 2014 23:33:15)

Офлайн

  • Начало
  • » GUI
  • » Tkinter. Увеличить размер надписей. И не только.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version