Форум сайта python.su
0
Народ хелп!
Как видно из поста выше, я разобрался как скомпилировать свой код). Но возникла опять проблема.
Я модернизировал свой код ( вставил картинку для наглядности ввода данных), так вот после компиляции фаил работает только на моем пк, на других пишет типа какая то проблема со скриптом (думаю это из-за картинки).
Ну я подумал, и решил начать изучение библиотеки matplotlib (в будущем хочу их подружить с tkinter для свое программки, что бы решить проблему с картинкой)
Вернусь к проблеме, как сделать что бы ось Y начинала отсчет от 4. (т.е. ось Х пересекала ось Y=4)
Нужно вот для чего.
Есть измеряемая величина в норме диапазон 4-20 , но возможет выход за диапазон. Хочу воспользоваться plt.bar(), но что-бы начало было от 4 по оси Y.
Буду признателен в помощи
Вроде разобрался.
Отредактировано white (Апрель 17, 2020 13:02:33)
Офлайн
0
Хьюстон, вновь нужна помощь
Как сделать что бы фон везде стал серый ('grey')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import numpy from tkinter import * import tkinter as tk import matplotlib.pyplot as plt import matplotlib from tkinter import messagebox def grah(): fig, ax = plt.subplots(1) fig.clf() fig, ax = plt.subplots(1) for label in ax.xaxis.get_ticklabels(): label.set_fontsize(0) for label in ax.yaxis.get_ticklabels(): label.set_fontsize(0) plt.tick_params(length = 0, width = 0) plt.plot([0,0], [0,0], color='white') plt.plot([-0.25,0.25], [100,100], color='green', linewidth = 3) plt.plot([-0.25,0.25], [0,0], color='green', linewidth = 3) plt.bar(0, percent, color='red', width = 0.5, bottom = 0) fig = matplotlib.pyplot.gcf() fig.set_size_inches(1, 5) canvas = FigureCanvasTkAgg(fig, master=root) plt_widget = canvas.get_tk_widget() plt_widget.place(x=120, y=1) def procent(): global percent outmin = float(OutputMin.get()) outmax = float(OutputMax.get()) if outmax > outmin: scale = outmax - outmin percent = round(((rez - outmin )* 100)/scale, 2) percentstr = str(percent) + ' %' textproc = Label(root, bg = "grey", fg = "red", justify = CENTER, width=11, font=("Ubunte", 14), text=percentstr) textproc.place(x=1, y=220) grah() else: scale = outmin - outmax percent = round(((outmin - rez )* 100)/scale, 2) percentstr = str(percent) + ' %' textproc = Label(root, bg = "grey", fg = "red", justify = CENTER, width=11, font=("Ubunte", 14), text=percentstr) textproc.place(x=1, y=220) grah() def procent1(): global percent rangemax = float(RangeMax.get()) rangemin = float(RangeMin.get()) if rangemax > rangemin: scale = rangemax - rangemin percent = round(((rez - rangemin )* 100)/scale, 2) percentstr = str(percent) + ' %' textproc1 = Label(root, bg = "grey", fg = "red", justify = CENTER, width=11, font=("Ubunte", 14), text=percentstr) textproc1.place(x=1, y=220) grah() else: scale = rangemin - rangemax percent = round(((rangemin - rez )* 100)/scale, 2) percentstr = str(percent) + ' %' textproc1 = Label(root, bg = "grey", fg = "red", justify = CENTER, width=11, font=("Ubunte", 14), text=percentstr) textproc1.place(x=1, y=220) grah() def reshenie(): global rez outmin = OutputMin.get() outmax = OutputMax.get() rangemax = RangeMax.get() rangemin = RangeMin.get() try: out = Output.get() outmin = float(outmin) outmax = float(outmax) rangemax = float(rangemax) rangemin = float(rangemin) try: out = float(out) if outmin != outmax: Value.delete(0, END) Output.delete(0, END) rez = round (rangemin + (out - outmin)*(rangemin-rangemax)/(outmin-outmax), 2) Value.insert(1, rez) procent1() else: messagebox.showerror("Ошибка", "Ошибка ввода данных") except: val = Value.get() try: val = float(val) if outmin != outmax: Output.delete(0, END) Value.delete(0, END) rez = round (outmin + (val - rangemin)*(outmin-outmax)/(rangemin-rangemax), 2) Output.insert(0, rez) procent() else: messagebox.showerror("Ошибка", "Ошибка ввода данных") except ValueError: messagebox.showerror("Ошибка", "Должно быть введено число") except ValueError: messagebox.showerror("Ошибка", "Должно быть введено число") global OutputMax global OutputMin global Output global Value global RangeMax global RangeMin global root matplotlib.use('TkAgg') root = tk.Tk() root.title("Пересчет") root.geometry("221x500") root.resizable(width=False, height=False) root.configure(background = "grey") fig, ax = plt.subplots(1) for label in ax.xaxis.get_ticklabels(): label.set_color('white') label.set_fontsize(1) for label in ax.yaxis.get_ticklabels(): label.set_color('white') label.set_fontsize(1) plt.tick_params(length = 0, width = 0) plt.bar(0, 0, bottom = 0) #bottom - откуда берет начало бар по оси Y fig = matplotlib.pyplot.gcf() fig.set_size_inches(1, 5) canvas = FigureCanvasTkAgg(fig, master=root) plt_widget = canvas.get_tk_widget() TextOutMax = Label(root, bg = "grey", height=1, font=("Ubunte", 10), text="OUTPUT MAX") TextOutMax.place(x=17, y=50) OutputMax = Entry(root, bg = "grey", width=15, justify = CENTER) OutputMax.place(x=15, y=70) TextOutMin = Label(root, bg = "grey", height=1, font=("Ubunte", 10), text="OUTPUT MIN") TextOutMin.place(x=17, y=90) OutputMin = Entry(root, bg = "grey", width=15, justify = CENTER) OutputMin.place(x=15, y=110) TextOutput = Label(root, bg = "grey", height=1, font=("Ubunte", 10), text="OUTPUT") TextOutput.place(x=17, y=130) Output = Entry(root, bg = "grey", width=15, justify = CENTER) Output.place(x=15, y=150) TextRangeMax = Label(root, bg = "grey", height=1, font=("Ubunte", 10), text="RANGE MAX") TextRangeMax.place(x=17, y=340) RangeMax = Entry(root, bg = "grey", width=15, justify = CENTER) RangeMax.place(x=15, y=360) TextRangeMin = Label(root, bg = "grey", height=1, font=("Ubunte", 10), text="RANGE MIN") TextRangeMin.place(x=17, y=380) RangeMin = Entry(root, bg = "grey", width=15, justify = CENTER) RangeMin.place(x=15, y=400) TextValue = Label(root, bg = "grey", height=1, font=("Ubunte", 10), text="VALUE") TextValue.place(x=17, y=300) Value = Entry(root, bg = "grey", width=15, justify = CENTER,) Value.place(x=15, y=320) button1 = Button(root, bg = "grey", text="Решение", width=12, font=("Ubunte", 10), command=reshenie) button1.place(x=5.5, y=455) plt_widget.place(x=120, y=1) root.mainloop()
Офлайн
0
Доброго времени суток.
Я конечно понимаю, что надежда на помощь стремится к 0, но все же/
В чем моя ошибка (за исключением что я вообще полез в программирование)?
Задача, что бы при каждом новом вводе обновлялся график.
Я знаю, что сейчас угол рассчитывается не правильно.
import matplotlib.pyplot as plt import matplotlib as mpl import math i=0 while(i == 0): s = float(input()) while(s>0): a = math.pi/90 d = a * s plt.clf() # по идеи вот эта старка должна очищать область фигуры plt.subplot(111, projection='polar') #1.57 plt.plot([0, math.pi/2], [0, 1]) plt.plot([0, (math.pi/2)-d ], [0, 1]) plt.show() break
Офлайн
253
whiteОсновная - вы не формулируете в чем проблема. (У вас отличный код и я уверен что он работает именно так как вы написали).
В чем моя ошибка
Офлайн
0
doza_and
Основная - вы не формулируете в чем проблема. (У вас отличный код и я уверен что он работает именно так как вы написали).
Ошибка в том что ваши представления о функциях используемых инструментов не совпадают с реальностью.
Отредактировано white (Апрель 20, 2020 08:11:03)
Офлайн
0
вопрос все еще актуальный)
это вообще реально без библиотеки tkinter? (в смысле график не в окне tkinter)
Отредактировано white (Апрель 20, 2020 20:05:47)
Офлайн
253
whiteВстречный вопрос! А вы ссылки смотрели которые вам дали? Там примеры как надо делать то что вы хотите.
это вообще реально без библиотеки tkinter?
Офлайн
0
doza_and
А вообще у вас тоже будет работать. Окно с графиком не забывайте закрывать просто.
doza_and
А вообще у вас тоже будет работать. Окно с графиком не забывайте закрывать просто.
Офлайн
0
Добрый день!
Продолжу историю глупых вопросов.
class Data: def __init__(self, name, health): self.name = name self.health = health def rez(self): rez = int(name1.health) - int(name2.health) print(rez) name1 = Data("name1", "10") name2 = Data("name2", "20") name3 = Data("name3", "40") name4 = Data("name4", "90") name1.rez()
Офлайн
253
вопрос совершенно неясен.
whiteУ вас нет ввода данных (т.е. оператора input read и т п). Поэтому неясно какое место кода вы имеете ввиду.
Пользователь ввел name1, name2
def print(self): print(self.name,self.health)
Офлайн