Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/170: Рейтинг темы: голосов - 170, средняя оценка - 4.99
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
1

Windows form на Python

27.02.2015, 05:48. Показов 33518. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здрям!
У меня есть программа со следующим интерфейсом (см. картинку).
Логика следующая: при запуске построчно считывается txt файл: 1 строка - название первой кнопки (3. +), 2 строка - текст, который копируется в буфер при нажатии на эту кнопку, 3 строка (4. Нет) - название второй кнопки и т.д.

Я ее писал на C#. Как такую же на питоне написать? Нужен только функционал кнопок, табы и поля для ввода не нужны.

К Лутцу просьба не направлять - весь его учебник дышит одной фразой: Пайтон может всё, но об этом как-нибудь в другой раз, а сейчас мы родим "Hello, world".
Миниатюры
Windows form на Python  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2015, 05:48
Ответы с готовыми решениями:

Python 3 запрос multipart/form-data в requests с кодировкой Windows-1251
Доброго времени суток уважаемые форумчане. Пробую тут передать данные на страницу с...

Конфигурация windows form и unity 3D, вызов Uniry из windows form
Существует форма, на ней кнопка, при нажатии на кнопку происходит открытие полноценной игры на...

Создать win form, используя шаблон windows form в clr, однако такого шаблона на моей студии 2013 нет
есть необходимость создать win form используя шаблон windows form в clr, однако такого шаблона на...

Запуск Windows Form Applications на машине с ранними версиями Windows/.Net
Помогите решить проблему, есть приложение WFA написанное на VB.NET Framework 4.0, это приложение...

28
Эксперт Python
4632 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,133
Записей в блоге: 6
27.02.2015, 07:10 2
Очевидно, надо использовать какой-нибудь gui-фреймворк.
В комплекте идёт Tk, он совсем простенький, но на кнопки хватит.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.02.2015, 19:13 3
Цитата Сообщение от Kir@ Посмотреть сообщение
Логика следующая
Нифига не понял. Вот файл с названиями для кнопок
labels.txt
ХЗ #1
Сброс
Формат 1
Формат 0
3. +
4. Нет ХЗ чево
5. Неуст.
6. Посредник
7. Нет по адресу
8. Реорганизация
9. ХЗ #2
10. ХЗ #3
11. ХЗ #4
12. 11
13. ХЗ #5
14. ХЗ #6
15. ХЗ #7
16. ХЗ #8
17. ХЗ #9
18. ХЗ #10
19. ХЗ #11
20. ХЗ #12
21. Проверка
22. Кнопка 22

И не особо заморачиваясь слепленное окошко с кнопками
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env python3
 
from tkinter import *
from tkinter.messagebox import showinfo
 
ALL_BUTTONS = 24
LABELS_FILE = 'labels.txt'
 
labels = [ l.rstrip() for l in open(LABELS_FILE).readlines() ]
assert len(labels) == ALL_BUTTONS
 
def button_handler(event):
    text = event.widget['text']
    showinfo('Button pressed', 'Button with label\n' + text + '\nwas pressed')
 
root = Tk()
 
topFrame = Frame(root, pady=5, padx=2)
bottomFrame = Frame(root)
 
entrysFrame = Frame(topFrame)
topEntry = Entry(entrysFrame)
bottomEntry = Entry(entrysFrame)
topEntry.pack(side='top')
bottomEntry.pack(side='top')
entrysFrame.pack(side='left')
 
for label in labels[:4]:
    button = Button(topFrame, text=label, width=12)
    button.bind('<1>', button_handler)
    button.pack(side='left', expand=1, fill=Y)
 
topFrame.pack(side='top', expand=1, fill=X)
 
COLUMNS = 4
for number, label in enumerate(labels[4:]):
    button = Button(bottomFrame, text=label, width=20, relief='raised', anchor=W)
    button.bind('<1>', button_handler)
    button.grid(row = number // COLUMNS, column = number % COLUMNS)
 
bottomFrame.pack(side='top')
 
root.mainloop()
Windows form на Python
1
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
27.02.2015, 21:59  [ТС] 4
easybudda, и кто сказал, что это простой язык!? Форму я сегодня осилил с использованием grid. Может как-то не логично будет, но я хочу каждую строку в отдельную перемнную считать. Мне будет потом удобнее менять названия и т.д. Это как-нибцдь побдю :-) А вот беглый поиск по второй задаче не дал результатов: нажимаю на кнопку - в буфер копируется текст из определенной строки файла.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
28.02.2015, 00:02 5
Цитата Сообщение от Kir@ Посмотреть сообщение
и кто сказал, что это простой язык!?
Цитата Сообщение от Kir@ Посмотреть сообщение
К Лутцу просьба не направлять
Все кто его хоть немного знают, а ты судя по твоим сообщениям ничего не знаешь и учиться не хочешь.

Добавлено через 1 минуту
Цитата Сообщение от Kir@ Посмотреть сообщение
Может как-то не логично будет, но я хочу каждую строку в отдельную перемнную считать.
А если у тебя на форме будет +100 строк? Чую вы батенька извращенец ещё тот...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
28.02.2015, 01:00 6
Цитата Сообщение от Kir@ Посмотреть сообщение
и кто сказал, что это простой язык!?
Если Вы про перетаскивание мышкой кнопок на форму, то под Tk такие тоже есть, только я ими никогда не пользовался. А в плане кода - да, это очень простой код. На WinAPI экранов пять марсианского текста получилось бы, не меньше.

Цитата Сообщение от Kir@ Посмотреть сообщение
Может как-то не логично будет, но я хочу каждую строку в отдельную перемнную считать.
Как говорил один весьма уважаемый форумчанин, Вы не должны этого хотеть. На самом деле - в чём глубинный смысл держать 24 переменных одного типа (независимо от их содержимого)?
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
11.03.2015, 15:03  [ТС] 7
Цитата Сообщение от alex925 Посмотреть сообщение
Чую вы батенька извращенец ещё тот...
Это да

Пока сделал так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys
sys.path.append(r'C:\Python24\Lib')
import glob
from tkinter import *
from tkinter.messagebox import showinfo
ALL_BUTTONS = 40
LABELS_FILE = 'labels.txt'
labels = [ l.rstrip() for l in open(LABELS_FILE).readlines() ]
assert len(labels) == ALL_BUTTONS
def button_handler(event):
    text = event.widget['text']
    showinfo('Button pressed', 'Button with label\n' + text + '\nwas pressed')
 
root = Tk()
 
topFrame = Frame(root, pady=5, padx=2)
bottomFrame = Frame(root)
 
topFrame.pack(side='top', expand=1, fill=X)
COLUMNS = 4
for number, label in enumerate(labels[0:]):
    button = Button(bottomFrame, text=label, width=20, relief='raised', anchor=W)
    button.bind('<1>', button_handler)
    button.grid(row = number // COLUMNS, column = number % COLUMNS)
bottomFrame.pack(side='top')
root.mainloop()
Работает

А вот как бы теперь при нажатии на кнопку копировать в буфер обмена определенный текст?
На C# я это так реализовал:
C#
1
2
3
4
5
6
7
8
9
10
11
using (System.IO.StreamReader reader = new System.IO.StreamReader("name.txt", Encoding.UTF8))
{
button3.Text = (reader.ReadLine()); // чтение строки из файла в заголовок кнопки
button3.Tag = (reader.ReadLine()); // чтение строки из файла для копирования в буфер
}
...
private void button3_Click(object sender, EventArgs e)
{
Clipboard.Clear();
Clipboard.SetText(button3.Tag.ToString());
}
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
17.03.2015, 19:51 8
Kir@, , как я понял, вам нужно это.
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
16.07.2015, 09:04  [ТС] 9
В программе проблемы с кодировкой - кракозябры отображаются на названиях кнопок.
Win7 корпоративная, я региональных стандартах стоит русский, файл с названиями кнопок в utf-8.

Добавление строки
C
1
# -*- coding: utf-8 -*-
эффекта не дает, как и decode и encode, вставляемый в разные места кода.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.07.2015, 09:58 10
Kir@, Передавай юникод строки в поля
Python
1
text = u'кнопка'
Если не поможет, попробуй закодировать строку в utf16 и её отправляй.
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
16.07.2015, 11:30  [ТС] 11
alex925, подскажите, пожалуйста, указанный вами код, в какое место поставить?
Листинг моего (спасибо easybudda) кода в сообщении 11.03.2015, 21:03.

Добавлено через 9 минут
Вообще все сломалось!

Python
1
2
3
4
5
6
Traceback (most recent call last):
  File "C:\Users\*\Documents\Visual Studio 2010\Projects\! Питонроверка ка\1.py", line 8, in <module>
    labels = [ l.rstrip() for l in open(LABELS_FILE).readlines() ]
  File "C:\Users\*\AppData\Local\Programs\Python\Python35\lib\encodings\cp1251.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 218: character maps to <undefined>
Добавлено через 26 минут
Я перестал что-то понимать.
Другой py файл, аналогичное чтение из такого же файла, все считывается в русском...
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.07.2015, 11:34 12
Цитата Сообщение от Kir@ Посмотреть сообщение
Другой py файл, аналогичное чтение из такого же файла, все считывается в русском...
А это скорее всего из-за пути. Запомни на будущие в пути НЕ ДОЛЖНО быть КИРИЛЛИЦЫ и ПРОБЕЛОВ в названиях папок.
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
16.07.2015, 11:47  [ТС] 13
Заново файл переписал, все работает, импортируется по-русски.

Добавлено через 1 минуту
Цитата Сообщение от alex925 Посмотреть сообщение
А это скорее всего из-за пути. Запомни на будущие в пути НЕ ДОЛЖНО быть КИРИЛЛИЦЫ и ПРОБЕЛОВ в названиях папок.
Это, по-моему, решается экранированием.
В данном случае есть и русский путь и пробелы в названиях.

Добавлено через 4 минуты
52 кнопки в 4 колонки располагаются так:
1 2 3 4
5 6 7 8
А как сделать вот так:
1
2
3
4
т.е. по вертикали?
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.07.2015, 11:50 14
Цитата Сообщение от Kir@ Посмотреть сообщение
В данном случае есть и русский путь и пробелы в названиях.
Я рад за тебя, только долго так не получится жить, все равно рано или поздно споткнёшься. Тут так же как и в жизни: "Завязывай шнурки иначе упадёшь рано или поздно.".
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
16.07.2015, 12:12  [ТС] 15
Проблема была в самом текстовом файле, что-то не то было с кодировкой. С этим разобрался.
Теперь вопрос №2:

Как по нажатию на кнопку отправить в буфер обмена текст?
Есть файл name.txt.

Я из него импортирую строки вот так:
Python
1
2
3
4
# Импорт текста для копирования
SLOVO_FILE = 'name.txt'
clipboard_append = [ l.rstrip() for l in open(SLOVO_FILE).readlines() ]
assert len(clipboard_append) == ALL_BUTTONS
Затем объявляю команду для очистки буфера и его наполнения строкой из файла:
Python
1
2
3
4
#Объявляю команду
def com():
    root.clipboard_clear()
    root.clipboard_append()
Кнопке добавляю команду в конце:
Python
1
button = Button(bottomFrame, text=label, width=15, relief='raised', anchor=W, command=com)
Получаю ошибку:
TypeError: clipboard_append() missing 1 required positional argument: 'string'
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.07.2015, 12:36 16
Цитата Сообщение от Kir@ Посмотреть сообщение
TypeError: clipboard_append() missing 1 required positional argument: 'string'
Описание ошибки более чем исчерпывающие, включи мозг. Тебе ясно написано: пропущен 1 обязательный позиционный аргумент.

Цитата Сообщение от Kir@ Посмотреть сообщение
Проблема была в самом текстовом файле, что-то не то было с кодировкой. С этим разобрался.
Тупой visual studio потому что по умолчанию для документов использует кодировку cp1251, а ты интерпретатору обещал utf8
Цитата Сообщение от Kir@ Посмотреть сообщение
# -*- coding: utf-8 -*-
Отсюда и ошибка.
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
16.07.2015, 12:46  [ТС] 17
alex925, visual studio здесь только потому что в его папке лежат проекты. Тема с кодировкой закрыта.

По ошибке мозг не включается, просьба подсказать

И еще, есть у кнопки свойство цвет bg = ....

Кстати, все это реализовано у меня, но без импорта из txt файла, т.е. внутри программы на 100500 строк.
Теперь хочу правильно все сделать.
Так вот, возвращаясь к цвету:
Импорт цветов из файла:
Python
1
2
3
COLOR_FILE = 'color.txt'
color_append = [ l.rstrip() for l in open(COLOR_FILE).readlines() ]
assert len(color_append) == ALL_BUTTONS
Указываю его кнопке:
Python
1
 button = Button(bottomFrame, text=label, width=15,[B] bg = color_append[/B], relief='raised', anchor=W, command=com)
Ошибка:
Python
1
tkinter.TclError: unknown color name "{"green"} {"yellow"}...
Цвета в файле указаны построчно вот так:
"green"

Игры с кавычками. апострофами и без них результата не дали.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.07.2015, 12:47 18
Кавычки из файла убери, они там не нужны.
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
16.07.2015, 12:49  [ТС] 19
Python
1
_tkinter.TclError: unknown color name "green yellow yellow yellow yellow yellow grey grey grey grey grey grey grey orange grey red red red grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey grey"
Те же грабли, только сбоку.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.07.2015, 12:54 20
Ты считал из файла всю строку (в которой разом много цветов перечислено) и запихнул все это дело в аргумент bg, естественно интерпретатор матерится.
Ты должен вытащить из файла все цвета по дельности и скармливать кнопкам.
0
16.07.2015, 12:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2015, 12:54
Помогаю со студенческими работами здесь

Перевод кода из Windows Form в Universal App для Windows 8.1
Добрый вечер. Нужна помощь. Есть игра написанная в C# Windows Form, необходимо перевести код в...

Как мне собрать и открыть Windows Form приложение в Windows XP?
Есть приложение WindowsForm C# .Net Framework 3.5 SP с SQL таблицами. Как мне собрать и открыть это...

Ошибка при создании приложения windows form на Windows 7
На windows 8 без проблем работал, решил поставить 7-ку и возникла ошибка . Читал что проблема...

Windows Form запускается не на всех версиях Windows
Всех приветствую! Случился такой конфуз, сделал лабораторную про программированию, проверил на...

Form.Hide ; Form.Close ; Form.Show
Здравствуйте. Вот интересует один вопрос, в чём различие между Form1.Close; Form2.Show и...

Запуск скрипта написанного на python на windows, где не установлен python
Не запускается скрипт на Windows, где не установлен python. Команда в коде на выполнение написана...

Windows Form
Здравствуйте. Чем дальше в лес, тем толще партизаны.... 1.Как сделать так, чтобы моя форма(решая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru