Найти - Пользователи
Полная версия: Не работает команда копирования в буфер
Начало » GUI » Не работает команда копирования в буфер
1
Kir@
Здрям!

Логика программы:
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()
terabayt
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)
Kir@
terabayt, спасибо, не работает
Копируется номер (кнопки?), а желательно чтобы строка из файла ‘name.txt’.
Kir@
Вот так работает:
def com(number):
    a=root.clipboard_clear()
    b=root.clipboard_append(SLOVO[number])

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

Как будет правильнее?
terabayt
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)
# и т.д.
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