Найти - Пользователи
Полная версия: Хьюстон, у нас проблемы.
Начало » Python для новичков » Хьюстон, у нас проблемы.
1 2 3 4
white
Народ хелп!
Как видно из поста выше, я разобрался как скомпилировать свой код). Но возникла опять проблема.
Я модернизировал свой код ( вставил картинку для наглядности ввода данных), так вот после компиляции фаил работает только на моем пк, на других пишет типа какая то проблема со скриптом (думаю это из-за картинки).
Ну я подумал, и решил начать изучение библиотеки matplotlib (в будущем хочу их подружить с tkinter для свое программки, что бы решить проблему с картинкой)
Вернусь к проблеме, как сделать что бы ось Y начинала отсчет от 4. (т.е. ось Х пересекала ось Y=4)

Нужно вот для чего.
Есть измеряемая величина в норме диапазон 4-20 , но возможет выход за диапазон. Хочу воспользоваться plt.bar(), но что-бы начало было от 4 по оси Y.
Буду признателен в помощи


Вроде разобрался.
white
Хьюстон, вновь нужна помощь
Как сделать что бы фон везде стал серый ('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()
white
Доброго времени суток.
Я конечно понимаю, что надежда на помощь стремится к 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
doza_and
white
В чем моя ошибка
Основная - вы не формулируете в чем проблема. (У вас отличный код и я уверен что он работает именно так как вы написали).
Ошибка в том что ваши представления о функциях используемых инструментов не совпадают с реальностью.

Для борьбы с этим сильно помогает чтение документации.
https://matplotlib.org/3.1.1/users/event_handling.html
https://matplotlib.org/3.1.1/gallery/user_interfaces/embedding_in_tk_sgskip.html
white
doza_and
Основная - вы не формулируете в чем проблема. (У вас отличный код и я уверен что он работает именно так как вы написали).
Ошибка в том что ваши представления о функциях используемых инструментов не совпадают с реальностью.

Почему то, когда мне отвечают на формах, складывается впечатление, что я общаюсь с мастером Йода))

А если серьезно, задумка такая:
вводишь переменную s (строчка s = float(input()) )
появляется график.
вводишь новое значение s
график обновляется
white
вопрос все еще актуальный)

это вообще реально без библиотеки tkinter? (в смысле график не в окне tkinter)
doza_and
white
это вообще реально без библиотеки tkinter?
Встречный вопрос! А вы ссылки смотрели которые вам дали? Там примеры как надо делать то что вы хотите.
А вообще у вас тоже будет работать. Окно с графиком не забывайте закрывать просто.
white
doza_and
А вообще у вас тоже будет работать. Окно с графиком не забывайте закрывать просто.

Честно, пытался читать, но знание иностранных языков стремится к 0. Да и знания в программирование примерно такие же. Вот я и пытаюсь эти знания подтянуть.

doza_and
А вообще у вас тоже будет работать. Окно с графиком не забывайте закрывать просто.

Да в том то и проблема, что задумка другая). Вот если перенести график в окно tkinter все обновляется. Если воспользоваться функцией анимации, все вроде работает но если клацнуть по графику все зависает.

В общем в любом случае спасибо за подсказки!
white
Добрый день!
Продолжу историю глупых вопросов.
 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()

Только начал осваивать классы, и поэтому не кидайте в меня камнями.
Вопрос такой:
Как реализовать что бы в методе rez, так что бы в “rez = int(name1.health) - int(name2.health)” name1 и name2 изменялись на другие данные.
например:
Пользователь ввел name1, name2 вывелись данные
Пользователь ввел name3, name4 вывелись данные
т.д.
число введенных данных пользователем не ограничено.

Заранее спасибо!
doza_and
вопрос совершенно неясен.
white
Пользователь ввел name1, name2
У вас нет ввода данных (т.е. оператора input read и т п). Поэтому неясно какое место кода вы имеете ввиду.

Обычно народ делает что-то типа

  def print(self):
        print(self.name,self.health)
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