Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Не работает команда копирования в буфер [RSS Feed]

#1 Авг. 13, 2015 06:11:02

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает команда копирования в буфер

Здрям!

Логика программы:
1. есть 3 файла-справочника:
1.1 labels.txt - названия кнопок;
1.2 colors.txt - цвет кнопок;
1.3 name.txt - текст для копирования в буфер.
2. В каждом справочнике 52 строки, соответственно числу кнопок на форме.
3. При нажатии на кнопку 1 буфер обмена должен очиститься и в него скопироваться строка номер 1 из файла name.txt, кнопки 3 - строка 3, ну и т.д.

Так вот, буфер не очищается и текст не копируется. Помогите, пожалуйста, победить.

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():
    a=root.clipboard_clear()
    b=root.clipboard_append()
# GUI
root = Tk()
# ПОВЕРХ ВСЕХ ОКОН
root.wm_attributes("-topmost", 1)
root.title(u'Проверка контрагентов')
# размер окна неизменен
root.resizable(False, False)
# Положение в правом верхнем углу
root.geometry('+600+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], font='helvetica 8', relief='raised', anchor=W, command=com)
    button.grid(row = number // COLUMNS, column = number % COLUMNS)
bottomFrame.pack(side='top')
#Ожидание реакции
root.mainloop()

Офлайн

#2 Авг. 13, 2015 10:33:46

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Не работает команда копирования в буфер

Kir@
Так вот, буфер не очищается и текст не копируется.
from tkinter import*
так делать плохо!

а чтобы работал ваш код
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=lambda number=number: com(number))
def com(number):
    a=root.clipboard_clear()
    b=root.clipboard_append(number)



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Авг. 13, 2015 10:40:43

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает команда копирования в буфер

terabayt, спасибо, не работает
Копируется номер (кнопки?), а желательно чтобы строка из файла ‘name.txt’.

Офлайн

#4 Авг. 13, 2015 10:41:55

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает команда копирования в буфер

Вот так работает:

def com(number):
    a=root.clipboard_clear()
    b=root.clipboard_append(SLOVO[number])

terabayt, еще раз СПАСИБО!

Офлайн

#5 Авг. 13, 2015 10:47:55

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает команда копирования в буфер

terabayt
Kir@
Так вот, буфер не очищается и текст не копируется.
from tkinter import*
так делать плохо!

Как будет правильнее?

Офлайн

#6 Авг. 13, 2015 13:30:21

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Не работает команда копирования в буфер

Kir@
Как будет правильнее?
import tkinter
или
import tkinter as tk
тогда будет так
# . . .
root = tk.Tk()
# ПОВЕРХ ВСЕХ ОКОН
root.wm_attributes("-topmost", 1)
root.title(u'Проверка контрагентов')
# размер окна неизменен
root.resizable(False, False)
# Положение в правом верхнем углу
root.geometry('+600+30')
# Прочее что-то
topFrame = tk.Frame(root, pady=5, padx=2)
bottomFrame = tk.Frame(root)
topFrame.pack(side='top', expand=1, fill=tk.X)
# и т.д.



————————————————
-*- Simple is better than complex -*-

Офлайн

  • Начало
  • » GUI
  • » Не работает команда копирования в буфер[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version