#python #python-3.x #tkinter #window #double-click
Вопрос:
Я создал графический интерфейс python с помощью tkinter и запускал его через командную строку. Но когда я попытался открыть его двойным щелчком, он вскоре отобразил окно, но снова вышел. Я попытался прокомментировать все места, где он использует изображения, думая, что это потому, что у него нет прав на редактирование файлов, когда он запускается двойным щелчком мыши, и это сработало! Но мне нужно использовать изображения в графическом интерфейсе, у кого-нибудь есть решения?
import tkinter as tk from PIL import Image, ImageTk import time root = tk.Tk() root.title("Krypto Coin") root.iconbitmap('icon.ico') root.configure(bg="#112233") Frame = tk.Frame(root, width=1200, height=800, bg="#112233") Frame.grid(columnspan=3, rowspan=5) icon = Image.open('icon_round.png') icon = ImageTk.PhotoImage(icon) icon_label = tk.Label(image=icon, borderwidth=0, highlightthickness=0) icon_label.place(relx=0.5, rely=0.2, anchor="center") text = tk.Label(root, text="Welcome to Krypto Coin (KTC)", bg="#112233", fg="#ffffff", font=("Arial", 32)) text.place(relx=0.5, rely=0.45, anchor="center") text = tk.Label(root, text="Enter id of the receiver and amount", bg="#112233", fg="#ffffff", font=("Arial", 24)) text.place(relx=0.5, rely=0.5, anchor="center") def trasfer_button_pressed(): time.sleep(0.1) trasfer_button_text.set("Loading...") trasfer_button.configure(state="disable") trasfer_button.configure(bg="#112233") input_id.configure(state="disable") input_amount.configure(state="disable") def trasfer_button_enter(e): if trasfer_button_text.get() == "Transfer": trasfer_button.configure(bg="#334455") def trasfer_button_leave(e): if trasfer_button_text.get() == "Transfer": trasfer_button.configure(bg="#223344") trasfer_button_text = tk.StringVar() trasfer_button = tk.Button(root, textvariable=trasfer_button_text, command=lambda:trasfer_button_pressed(), bg="#223344", fg="#ffffff", width=15, height=1, font=("Arial", 24), borderwidth=0, highlightthickness=0) trasfer_button_text.set("Transfer") trasfer_button.place(relx=0.5, rely=0.65, anchor="center") trasfer_button.bind("lt;Entergt;", trasfer_button_enter) trasfer_button.bind("lt;Leavegt;", trasfer_button_leave) input_id = tk.Entry(root, width=48, font = "Arial 14", bg="#334455", fg="#ffffff", borderwidth=0, highlightthickness=0) input_id.insert(0, "ID") input_id.place(relx=0.45, rely=0.8, anchor="center", height=30) input_amount = tk.Entry(root, width=20, font = "Arial 14", bg="#334455", fg="#ffffff", borderwidth=0, highlightthickness=0) input_amount.insert(0, "Amount") input_amount.place(relx=0.65, rely=0.8, anchor="center", height=30) root.mainloop()
Комментарии:
1. попробуйте добавить функцию
main()
и вставить код сюда. в нижней части добавьтеif __name__ == "__main__": main()
его, возможно, это поможет вам2. Текущий рабочий каталог может не указывать путь к сценарию при использовании двойного щелчка для его выполнения, поэтому любая загрузка ресурсов с использованием относительного пути завершится ошибкой.
3. что вы имеете в виду под этим и как мне это исправить?
4. Когда вы открываете командную оболочку и меняете каталог на путь к сценарию. Тогда текущий рабочий каталог -это путь к сценарию. Когда вы запускаете свой скрипт сейчас, он работает, потому что к этим относительным путям можно получить доступ. Однако, если вы измените каталог на другой путь, текущий рабочий каталог будет новым путем. Когда вы снова запустите сценарий, указав полный путь к сценарию, он завершится ошибкой, поскольку относительный путь в вашем сценарии не существует в текущем рабочем каталоге .