Голосование за лучший ответ
Тома Кулешова
Ученик
(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-приложений.
________________________________________________________________________________
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