Найти - Пользователи
Полная версия: ошибка при работе с rtree , tkinter и spatialindex
Начало » GUI » ошибка при работе с rtree , tkinter и spatialindex
1 2
Timych
Я пытаюсь сгенерировать exe файл с помощью pyinstaller , но при запуске выходит ошибка :


  in exec_module
      exec(bytecode,module.__dict__)
File "rtree\core.py",line 126, in <module>
OSError: could not find or load spatialindex_c-64.dll
[16436] Failed to execute script main

Я находил много вопросов по этой теме, но ничего не помогло. Хотя я и пытался удалить rtree и установить .whl файл но после устновки была идентичная ошибка и просто spatialindex_c-64.dll менялся на spatialindex_c.dll

Прикрепляю вложение: Те строки кода,на которые ссылается exe при генерации ошибки

Спасибо за ответы!
simonovaleksandr
я пытаюсь написать графический калькулятор для решения квадратных уравнений,
распологаю кнопки ,текстовые метки,и поля ввода с помощью place(relx,rely)


   
from tkinter import *
from math import sqrt
def solver(a, b, c):
    D = b * b - 4 * a * c
    if D > 0:
        x1 = (-b + sqrt(D)) / (2 * a)
        x2 = (-b - sqrt(D)) / (2 * a)
        text = "Дескриминант: %s \n X1 равен: %s \n X2 равен: %s \n" % (D, x1, x2)
    elif D == 0:
        x1 = (-b) / (2 * a)
        text = "Дескриминант: %s \n X равен: %s \n" % (D, x1)
    else:
        text = "Дескриминант : %s \n Данное уравнение не имеет корней" % D
    return text
def inserter(value):
    output.delete("0.0", "end")
    output.insert("0.0", value)
def handler():
    try:
        # make sure that we entered correct values
        a_val = float(a.get())
        b_val = float(b.get())
        c_val = float(c.get())
        inserter(solver(a_val, b_val, c_val))
    except ValueError:
        inserter("Вы не ввели 3 переменных")
root = Tk()
root.title('Решение квадратных уравнений')
root.minsize(1000, 1000)
frame = Frame(root)
frame.place()
a = Entry(frame)
a.place(relx=0.005, rely=0.005,relwidth=0.50)
a_lab = Label(frame, text="a+").place(relx=0.055, rely=0.005)
b = Entry(frame)
b.place(relx=0.055, rely=0.005,relwidth=0.050)
b_lab = Label(frame, text="b+").place(relx=0.105, rely=0.005)
c = Entry(frame)
c.place(relx=0.105, rely=0.005,relwidth=0.100)
c_lab = Label(frame, text="c+").place(relx=0.155, rely=0.005)
but = Button(root, text="решить", command=handler,relx=0.900,rely=0.100)
output = Text(frame, bg="lightblue", font="Arial 12",height=900,width=900)
output.place(relx=0.005,rely=0.200)
root.mainloop()

при выполнении этого кода выходит ошибка:

C:\Users\user\AppData\Local\Programs\Python\Python38-32\python.exe “CUsers/user/PycharmProjects/untitled2/относительное расположение кнопок.py”
Traceback (most recent call last):
File “CUsers/user/PycharmProjects/untitled2/относительное расположение кнопок.py”, line 41, in <module>
but = Button(root, text=“решить”, command=handler,relx=0.900,rely=0.100)
File “C:\Users\user\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py”, line 2645, in __init__
Widget.__init__(self, master, ‘button’, cnf, kw)
File “C:\Users\user\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py”, line 2567, in __init__
self.tk.call(
_tkinter.TclError: unknown option “-relx”

Process finished with exit code 1
Скажите как исправить ошибку и как исправить ошибки чтобы программа работала ,и работала как надо
FishHook
but = Button(root, text="решить", command=handler,relx=0.900,rely=0.100)

А разве Button принимает relx? Вы наверное хотели сделать .place(relx=0.900,rely=0.100)
simonovaleksandr
Я сделал поправку ,но когда я нажал выполнить на холсте только кнопка решить и ни текстовых меток ,ни ни рамок ввода нет .Почему так?Вот код программы:

   
from tkinter import *
from math import sqrt
def solver(a, b, c):
    D = b * b - 4 * a * c
    if D > 0:
        x1 = (-b + sqrt(D)) / (2 * a)
        x2 = (-b - sqrt(D)) / (2 * a)
        text = "Дескриминант: %s \n X1 равен: %s \n X2 равен: %s \n" % (D, x1, x2)
    elif D == 0:
        x1 = (-b) / (2 * a)
        text = "Дескриминант: %s \n X равен: %s \n" % (D, x1)
    else:
        text = "Дескриминант : %s \n Данное уравнение не имеет корней" % D
    return text
def inserter(value):
    output.delete("0.0", "end")
    output.insert("0.0", value)
def handler():
    try:
        # make sure that we entered correct values
        a_val = float(a.get())
        b_val = float(b.get())
        c_val = float(c.get())
        inserter(solver(a_val, b_val, c_val))
    except ValueError:
        inserter("Вы не ввели 3 переменных")
root = Tk()
root.title('Решение квадратных уравнений')
root.minsize(1000, 1000)
frame = Frame(root)
frame.place()
a = Entry(frame)
a.place(relx=0.005, rely=0.005,relwidth=0.50)
a_lab = Label(frame, text="a+").place(relx=0.055, rely=0.005)
b = Entry(frame)
b.place(relx=0.055, rely=0.005,relwidth=0.050)
b_lab = Label(frame, text="b+").place(relx=0.105, rely=0.005)
c = Entry(frame)
c.place(relx=0.105, rely=0.005,relwidth=0.100)
c_lab = Label(frame, text="c+").place(relx=0.155, rely=0.005)
but = Button(root, text="решить", command=handler).place(relx=0.900,rely=0.100)
output = Text(frame, bg="lightblue", font="Arial 12",height=900,width=900)
output.place(relx=0.005,rely=0.200)
root.mainloop()



simonovaleksandr
Помогите
FishHook
simonovaleksandr
Помогите
Я не вижу в вашем коде ни одного вызова pack(), но что-то мне подсказывает, что так оно работать не будет. Покажите, каким мануалом вы пользовались для написания вашей программы
rami
Будет нормально работать и с place(), но это примитивный и самый трудоёмкий упаковщик, он ждёт, что программист посчитает все размеры и положения виджетов, а ТС это не делает, все виджеты свалены в кучу. У кнопки родитель — главное окно, поэтому она видна, а у остальных виджетов родитель frame без размеров, поэтому они “сколапсировали в ноль”, чтобы они стали видны, фрейму надо задать размеры, например, так:
 frame = Frame(root)
frame.place(height=800,width=800)

Можно ещё заменить frame на root и правильно распределить виджеты по окну (лучше использовать pack() или grid().
simonovaleksandr
Я пользовался place () относительным расположением рамок меток и программ
simonovaleksandr
Спасибо rami
simonovaleksandr
frame = Frame(root)
frame.place(relheight=0.800,relwidth=0.800)
А вот так задавать размеры можно?
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