Я пытаюсь заполнить 2 спинбоксами с разными значениями из одного текстового файла (file.txt). Я управляю этим путем поиска «баннеров» (TITLE) в файле и заполнения каждого из значений между двумя указанными баннерами.Как я могу индексировать по строке в спинке, а не по номеру символа?
'file.txt' будет что-то вроде этого:
(без дополнительных символов новой строки)
............ #exactly 12 в соответствии с шаблонами в код
TITLE 1
............
первая вещь
вторая вещь
............
TITLE 2
............
первичной
вторичный
............
НАЗВАНИЕ 3
............
from tkinter import *
import tkinter as tk
import re
root = Tk()
class Main():
def __init__(self, root):
pass
def Thing1():
read_thing = open('file.txt', 'r')
read_names = read_thing.read()
print (read_names)
pattern3 =r'^(............)$\
^(TITLE 1)$\
^(............)$'
pattern4 = r'^(............)$\
^(TITLE 2)$\
^(............)$'
multiline3 = re.compile(pattern3, re.MULTILINE)
multiline4 = re.compile(pattern4, re.MULTILINE)
for match in multiline3.finditer(read_names):
s=match.start()
e=match.end()
for match in multiline4.finditer(read_names):
s1=match.start()
e1=match.end()
output = (read_names[e: s1])
print (output)
return output
def Thing2():
read_thing = open('file.txt', 'r')
read_names = read_thing.read()
print (read_names)
pattern4 =r'^(............)$\
^(TITLE 2)$\
^(............)$'
pattern5 = r'^(............)$\
^(TITLE 3)$\
^(............)$'
multiline4 = re.compile(pattern4, re.MULTILINE)
multiline5 = re.compile(pattern5, re.MULTILINE)
for match in multiline4.finditer(read_names):
s=match.start()
e=match.end()
for match in multiline5.finditer(read_names):
s1=match.start()
e1=match.end()
output = (read_names[e: s1])
print (output)
return output
values1 = Main.Thing1()
values2 = Main.Thing2()
def sb1_changed():
selected = var1.get()
idx = values1.index(selected)
print('selected:', selected)
print('index', idx)
var2.set(values2[idx])
def sb2_changed():
selected = var2.get()
idx = values2.index(selected)
print('selected:', selected)
print('index', idx)
var1.set(values1[idx])
var1 = tk.StringVar()
var2 = tk.StringVar()
spinbox1=tk.Spinbox(self, textvariable=var1, values=values1,
command=sb1_changed)
spinbox1.pack()
spinbox2=tk.Spinbox(self, textvariable=var2, values=values2,
command=sb2_changed)
spinbox2.pack()
root.mainloop()
Идея с sb1_changed и sb2_changed является то, что, как я прокрутки и, следовательно, выбрать различные значения в 1 со счётчиком, я также должен быть одновременно прокрутки различные значения в другой спинбонке.
Однако, что на самом деле происходит, что прокрутка через один из спинбокс делает, прокручивая другую, но я могу видеть только отдельные символы, а не целые слова. Таким образом, кажется, что индекс соответствует номерам символов, а не линиям. Как я могу заставить его соответствовать строкам?
Создайте простой рабочий пример, чтобы запустить его. – furas
Это рабочий пример, который запускается. С предыдущим комментарием (теперь удаленным) вы, казалось, указывали на мою проблему. У тебя есть решение? Пример моей проблемы может помочь: если у меня есть «первый» в sb1 и «primary» в sb2 в качестве начальных значений, прокрутка через sb1 дает мне первый индексный символ sb2, то есть: «p». Как я могу заставить его дать мне «первичную»? – MarkyMark
не работает пример - я не могу просто скопировать-вставить его запустить.Вы помещаете только некоторый класс и Spinboxes, но этого недостаточно для его запуска. – furas