L oop create.line tkinter - PullRequest
       0

L oop create.line tkinter

1 голос
/ 25 апреля 2020

Доброе утро всем,

У меня проблема с моим кодом. Я получаю список из файла .txt. Я хотел бы, чтобы с помощью инструмента Tkinter create line, автоматически создавал чертеж.

Обратите внимание, что мой список может содержать 4 элемента, например 30 элементов.

Поэтому я хотел бы просмотреть весь список до конца.

Вот код:

from tkinter import *

# Fenêtre
root = Tk()
Largeur = 1200
Hauteur = 800

canvas = Canvas(root, width=Largeur, height=Hauteur, background="white")
canvas.pack(side=LEFT, padx=5, pady=5)
root.resizable(width=False, height=False)
root.title('Heating Draw')

with open("valeur_x_y.txt", "r+") as file:
    liste_complet = file.readlines()
    file.close()

canvas.create_line(liste_complet[0], liste_complet[1], liste_complet[2], liste_complet[3], fill="red", width=3)
canvas.create_line(liste_complet[2], liste_complet[3], liste_complet[4], liste_complet[5], fill="red", width=3)
canvas.create_line(liste_complet[4], liste_complet[5], liste_complet[6], liste_complet[7], fill="red", width=3)

root.mainloop()

Можете ли вы мне помочь?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Я только что проверил, все работает отлично.

Теперь, из l oop, который вы сделали, я бы хотел получить результат ниже. Я все кодировал с модулем Turtle, но я не могу сосуществовать с Turtle и Tkinter в одном окне, поэтому я сказал себе, что собираюсь делать все с Tkinter.

Вот код Turtle с ожидаемый конечный результат.

from turtle import *

screen = Screen()

# Paramètre Turtle line1 et line2
line1 = Turtle()
line2 = Turtle()

# Définition des variables modifiables
color_table=["blue", "red"]
star_x = -160
star_y = 10
line1_size_x = 200
#line1_size_y = 200
line_pensize = 3
rotation_line = 90
entre_line = 20

# Import de la ligne1
line1.hideturtle()
line1.color(color_table[1])
line1.pensize(line_pensize)

#Import de la ligne 2:
line2.hideturtle()
line2.pensize(line_pensize)
line2.color(color_table[0])
line2_size = line1_size_x - entre_line

# Position de la ligne1
line1.penup()
line1.setposition(star_x, star_y)
line1.pendown()

# Boucle de traçage automatique
while True:
    line1.forward(line1_size_x)
    line1.left(rotation_line)
    line1_size_x -= entre_line / 2
    if line1_size_x <= entre_line / 2:
        break

# Position de la ligne 2
line2.penup()
line2.setposition(star_x + entre_line / 2, star_y + entre_line / 2)
line2.pendown()

while True:
    line2.forward(line2_size)
    line2.left(rotation_line)
    line2_size -= entre_line / 2
    if line2_size <= entre_line / 2:
        break

screen.mainloop()
1 голос
/ 26 апреля 2020

Это то, что я придумал. Предполагая, что вы отформатировали .txt файл так:

10, 10
20, 20
20, 20
40, 30
40, 30
80, 40
...
from tkinter import *

# Fenêtre
root = Tk()
Largeur = 1200
Hauteur = 800

canvas = Canvas(root, width=Largeur, height=Hauteur, background="white")
canvas.pack(side=LEFT, padx=5, pady=5)
root.resizable(width=False, height=False)
root.title('Heating Draw')

with open("valeur_x_y.txt", "r+") as file:
    liste_complet = file.readlines()
    liste_complet = ", ".join(liste_complet) # join it to a string
    liste_complet = liste_complet.replace("\n", "") # make it only 1-lined
    liste_complet = liste_complet.split(", ") # back to array where one value is one number
    file.close()

i = 0 # declare an index for later drawing

while(i <= len(liste_complet)-3): # going trough everything ("-3" preventing index out of range error)
    canvas.create_line(liste_complet[i], liste_complet[i+1], liste_complet[i+2], liste_complet[i+3], fill="red", width=3) # adding 1 to i for the next position
    i += 2 # adding 2 to i, because 1 position consists of 2 values

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...