Найти - Пользователи
Полная версия: Tkinter. Увеличить размер надписей. И не только.
Начало » GUI » Tkinter. Увеличить размер надписей. И не только.
1
Maxim3500
Суть - мини программа для проверки баланса на интернете. Интерфейс на ткинтере. Кнопка проверить баланс, надпись в которую выводится баланс и кнопка закрыть. Но - надписи на кнопках по сравнению с размерами кнопок крайне малы. Как сделать сами надписи побольше, ибо текущий вариант это максимум что влезло в экран ( ноут 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
4kpt_II
Вопрос не понятен. Так выставьте больше шрифт. А лучше скриншот в студию с пояснениями, что Вы хотите

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

P.S.S. Никогда не делайте from Tkiner import *.
Maxim3500
4kpt_II
А что именно в нем жуткого?.
по поводу скриншота - возможно я уже решил пролему самостоятельно. Если вопрос у меня решился - чуть позже напишу как.
Maxim3500
Проблема все же решена. Вместо того дабы задавать размеры кнопок, просто задал размер окна. Получилось красивее. Вопрос по поводу что же такого жуткого в коде остался.
4kpt_II
Ошибок тьма. Основные:
- комментарии где попало и как попало.
- названия виждетов и переменных.
- ООП нет и вряд-ли в ближайшее время будет
- про 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 почитать не помешает на досуге
Maxim3500
Хм. Спасибо. По поводу замечаний спасибо, но скажу что не все так плохо как вы думаете, ибо делался данный код на скорую руку, и он одновременно являлся знакомством с ткинтер, хотя это честно говоря плохое оправдание. Что такое PEP8 знаю, но все равно ознакомлюсь полностью. По поводу ООП - тут его нет, так как именно в данном случае оно не нужно абсолютно.
4kpt_II
Maxim3500
По поводу ООП - тут его нет, так как именно в данном случае оно не нужно абсолютно.

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

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

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

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

P.S.S. Для первого кода неплохо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB