Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python, программа на tkinter не компилируется.

Михаил К. Ученик (117), на голосовании 1 месяц назад
Если точнее, то компилируется, но всё, что открывается при попытке запуска программы- командная строка. Как сделать так, чтобы файл после компиляции открывался? На всякий случай, код прилагается.
________________________________________________________________________________
import tkinter as tk
from tkinter import *
from math import *

root = tk.Tk()
root.title("Калькулятор")
root.geometry("250x130")
root.resizable(height= False, width= False)

def Delete():
entry.delete(0, END)

def Eval():
label = entry.get()
if label == "":
lbl.config(text= "Введите выражение!")
elif label == "Введите выражение:":
lbl.config(text= "")
else:
a = eval(label)
lbl.config(text= a)

def Sqrt():
c = float(entry.get())
sqrt2 = sqrt(c)
lbl.config(text= sqrt2)
if c == "":
lbl.config(text= "Введите выражение!")

def Factorial():
d = int(entry.get())
fctrl = factorial(d)
lbl.config(text= fctrl)
if d == "":
lbl.config(text= "Введите выражение!")

def Validate_input(new_text):
allowed_chars = "0123456789+-*/()."
for char in new_text:
if char not in allowed_chars:
return False
return True

vcmd = (root.register(Validate_input), "%P")

frame= LabelFrame(root, height= 60, width= 516, borderwidth= 5)
frame.pack(anchor= NW, fill= X)

entry = Entry(frame, width= 25, validate= "key", validatecommand= vcmd)
entry.pack(anchor= NE, padx= 5, pady= 5)
entry.insert(0, "Введите выражение:")

frame2= LabelFrame(root, height= 30, width= 516, borderwidth= 5)
frame2.pack(anchor= NW, fill= X)

btn2 = Button(frame2, text= "√", command= Sqrt)
btn2.pack(anchor= NE, side= RIGHT)

btn3 = Button(frame2, text= "!", command= Factorial)
btn3.pack(side= LEFT, anchor= NE)

btn = Button(frame2, text= "Вывести", command= Eval)
btn.pack(side= TOP)
btn.bind('<KP_Enter>', Eval)

btn1 = Button(frame2, text= "Очистить", command= Delete)
btn1.pack(side= TOP)

frame3= LabelFrame(frame2, height= 15, width= 2313241, borderwidth= 0)
frame3.pack(anchor= SW, fill= X, padx= 0, pady= 1, side= LEFT)

lbl1 = Label(frame3, text= "Вывод: ")
lbl1.pack(anchor= SW, side= LEFT)

lbl = Label(frame3)
lbl.pack(side= LEFT)

root.mainloop
Голосование за лучший ответ
Тома Кулешова Ученик (174) 2 месяца назад
Если ваша программа на Tkinter открывает командную строку вместо окна приложения, возможно, вы компилируете её как консольное приложение. Чтобы это исправить, используйте параметр `--noconsole` при компиляции с помощью PyInstaller. Например, команда будет выглядеть так: `pyinstaller --noconsole your_script.py`. Это предотвратит открытие консоли и позволит запускать только графический интерфейс.
Эдуард Александрович Мастер (1338) 2 месяца назад
Чтобы файл после компиляции открывался не в командной строке, а в графическом интерфейсе, попробуйте добавить следующую строку в ваш код: root.mainloop().

_Любопытно, что работа с графическими интерфейсами часто отражается в кино. Например, в фильме "Хакеры" показано, как главные герои взламывают системы через красочные интерфейсы — об этом упоминали на ресурсе с обзорами film info._
S.H.I. Оракул (74169) 2 месяца назад
1. Если вы используете PyInstaller, укажите флаг «--noconsole» (или «--windowed») при сборке. Пример команды:

  pyinstaller --onefile --noconsole your_script.py

2. Если вы запускаете скрипт через Python на Windows, используйте интерпретатор pythonw.exe вместо python.exe. Файл pythonw.exe не открывает командную строку при запуске GUI-приложений.
Похожие вопросы