Программа не запускается при двойном щелчке, но запускается из cmd?

#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. Когда вы открываете командную оболочку и меняете каталог на путь к сценарию. Тогда текущий рабочий каталог -это путь к сценарию. Когда вы запускаете свой скрипт сейчас, он работает, потому что к этим относительным путям можно получить доступ. Однако, если вы измените каталог на другой путь, текущий рабочий каталог будет новым путем. Когда вы снова запустите сценарий, указав полный путь к сценарию, он завершится ошибкой, поскольку относительный путь в вашем сценарии не существует в текущем рабочем каталоге .