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

Windows form на Python

27.02.2015, 05:48. Показов 33535. Ответов 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
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
16.07.2015, 12:56  [ТС] 21
Author24 — интернет-сервис помощи студентам
alex925, а вот это я зачем написал тогда?
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
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.07.2015, 13:04 22
Цитата Сообщение от Kir@ Посмотреть сообщение
а вот это я зачем написал тогда?
У тебя надо спросить , я не эктрасен. Я тебе указан на ошибку, а зачем ты так делаешь я хз

Добавлено через 2 минуты
Если тебе нужно получить из текстовика список со всеми цветами, можешь это сделать вот так
Python
1
2
data = open('color', encoding='utf8')
all_color = data.read().split()
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,762
16.07.2015, 15:12 23
Цитата Сообщение от Kir@ Посмотреть сообщение
bg = color_append
Может всё-таки этому параметру один цвет из списка присваивать, а не весь список?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python3
 
import tkinter as tk
 
root = tk.Tk()
 
BUTTONS_COUNT = 3
COLORS_FILE = 'colors.txt'
 
with open(COLORS_FILE) as cf:
    COLORS = [ c for c in cf.read().splitlines() if c ]
assert len(COLORS) == BUTTONS_COUNT
 
frame = tk.Frame(root)
for i in range(BUTTONS_COUNT):
    b = tk.Button(frame, text='Button #' + str(i+1), bg=COLORS[i], command=root.quit)
    b.pack(side=tk.TOP, fill=tk.X)
frame.pack(fill=tk.BOTH)
 
root.mainloop()
Код
red
green
blue
Windows form на Python
1
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
17.07.2015, 07:08  [ТС] 24
Пока вот так наваял:

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
44
from tkinter import*
 
#Чтение названий кнопок
ALL_BUTTONS = 52
LABELS_FILE = 'labels.txt'
labels = [ l.rstrip() for l in open(LABELS_FILE).readlines() ]
assert len(labels) == ALL_BUTTONS
 
#Импорт цветов
COLORS_FILE = 'colors.txt'
with open(COLORS_FILE) as cf:
    COLORS = [ c for c in cf.read().splitlines() if c ]
assert len(COLORS) == ALL_BUTTONS
 
#Копирование в буфер обмена
SLOVO_FILE = 'name.txt'
with open(SLOVO_FILE) as sf:
        SLOVO = [ s for s in sf.read().splitlines() if s ]
assert len(SLOVO) == ALL_BUTTONS
 
#Объявляю команду
def com():
    root.clipboard_clear()
    root.clipboard_append()
 
# GUI
root = Tk()
root.wm_attributes("-topmost", 1)   # ПОВЕРХ ВСЕХ ОКОН
root.title(u'Проверка контрагентов')
root.resizable(False, False)        # размер окна неизменен
root.geometry('+410+30')            # Положение в правом верхнем углу
topFrame = Frame(root, pady=5, padx=2)
bottomFrame = Frame(root)
topFrame.pack(side='top', expand=1, fill=X)
COLUMNS = 13
 
#Присваивание кнопкам свойств
for number, label in enumerate(labels[0:]):
    button = Button(bottomFrame, text=label, width=15, bg=COLORS[number], relief='raised', anchor=W, command = com())
    button.grid(row = number // COLUMNS, column = number % COLUMNS)
bottomFrame.pack(side='top')
 
#Ожидание реакции
root.mainloop()
Не копирует в буфер нужный текст. Или копирует все содержимое name.txt или номер кнопки.
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
10.08.2015, 11:47  [ТС] 25
Не работает кусок кода, отвечающий за копирование. Я так понимаю, что неправильно обращаюсь к массиву.

Python
1
2
3
4
5
6
7
8
9
10
#Объявляю команду
def com():
    a=root.clipboard_clear()
    b=root.clipboard_append(SLOVO[number])
 
#Присваивание кнопкам свойств
for number, label in enumerate(labels[0:]):
    button = Button(bottomFrame, text=label, width=15, bg=COLORS[number], font='helvetica 8', relief='raised', anchor=W, command=com)
    button.grid(row = number // COLUMNS, column = number % COLUMNS)
bottomFrame.pack(side='top')

Перебрал кучу вариантов:
b=root.clipboard_append()
пропущен аргумент

b=root.clipboard_append(SLOVO)
копирует весь текстовый файл

b=root.clipboard_append(ALL_BUTTONS)
копирует кол-во элементов

b=root.clipboard_append(sf)
копирует свойства текстового файла

b=root.clipboard_append([number])
копирует только последний элемент

b=root.clipboard_append(number)
копирует только последний элемент

b=root.clipboard_append(label)
копирует только последний элемент

b=root.clipboard_append(COLORS[number])
копирует цвет

Помогите, пожалуйста, с кодом.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,762
10.08.2015, 14:20 26
Цитата Сообщение от Kir@ Посмотреть сообщение
b=root.clipboard_append(SLOVO)
копирует весь текстовый файл
b=root.clipboard_append(ALL_BUTTONS)
копирует кол-во элементов
b=root.clipboard_append(sf)
копирует свойства текстового файла
А что должно в буфер-то копироваться? Текст из окошка?
Python
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python3
 
import tkinter as tk
 
root = tk.Tk()
txt = tk.StringVar()
field = tk.Entry(root, textvariable=txt)
field.pack(side=tk.LEFT)
btn = tk.Button(root, text="Copy", command=lambda: root.clipboard_append(txt.get()))
btn.pack(side=tk.LEFT)
 
root.mainloop()
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
10.08.2015, 14:31  [ТС] 27
easybudda, копировать в буфер текст я умею, но только в том случае, когда кнопки создаю поштучно. И для каждой кнопки назначаю команду. Такой вариант программы у меня есть. но он весит 15 кб(!)
А вариант, с которым не получается - это подсказанный вами, где кнопки создаются пачкой в количестве 52 штук. Названия я им из файла прикручиваю, цвет прикручиваю, а текст для копирования из еще одного файла - не получается.

Добавлено через 3 минуты
Если смотреть сообщение 24, то словарь с текстом для копирования я беру в строках 15-19,
в строках 21-24 я пытаюсь (безуспешно) объединить две команды в одну.
И в 39 строке вот тут:
Python
1
command = com()
заставить программу по нажатию на кнопку очистить буфер и вставить в него из файла строку с определенным номером.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,762
10.08.2015, 17:42 28
Kir@, comand = com без скобок
0
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 730
11.08.2015, 04:54  [ТС] 29
easybudda, у меня в коде без скобок.

Цикл по файлу с цветами:
Python
1
2
3
4
COLORS_FILE = 'colors.txt'
with open(COLORS_FILE) as cf:
    COLORS = [ c for c in cf.read().splitlines() if c ]
assert len(COLORS) == ALL_BUTTONS
Цикл по файлу с текстом для копирования:
Python
1
2
3
4
SLOVO_FILE = 'name.txt'
with open(SLOVO_FILE) as sf:
    SLOVO = [ s for s in sf.read().splitlines() if s ]
assert len(SLOVO) == ALL_BUTTONS
Создаю на форме кнопки, присваиваю им названия:
Python
1
2
for number, label in enumerate(labels[0:]):
    button = Button(bottomFrame, text=label, width=15,
закрашиваю
Python
1
bg=COLORS[number], font='helvetica 8', relief='raised', anchor=W,
и пытаюсь заставить работать с буфером:
Python
1
command=com)
Логика такая:
Если я нажимаю кнопку с номером 0 (которой присвоено имя из строки №1 файла labels.txt, цвет из файла colors.txt), то в буфер должна скопироваться первая строка из файла name.txt.
Но не копируется.
0
11.08.2015, 04:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2015, 04: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.Как сделать так, чтобы моя форма(решая...


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

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