โปรแกรมของผมฉันเป็นเว็บเซิร์ฟเวอร์เครื่องมือสร้างกับส่วนติดต่อผู้ใช้และฉันอยากได้ข้อมูลจาก Text
ชั้นเรียนอยู่ใน tkinter แพกเกจและกลับมามันอยู่บนวดของเซิร์ฟเวอร์แต่โปรแกรมแสดงถึงสองหน้าต่างและปวดของเซิร์ฟเวอร์แสดงถึงไม่มีอะไรเลย
try:
import sys
import platform
from flask import Flask
from typing import List
from time import strftime
from datetime import date
from subprocess import run
from webbrowser import open
from consts import CONST_COLORS
from builtins import (str , int ,Exception)
from tkinter import font
from tkinter.tix import Button
from tkinter.ttk import (Label , Entry , Notebook , Frame , Combobox)
from tkinter.__init__ import (Tk , StringVar , Text)
from tkinter.constants import (RAISED , FLAT , BOTH , CENTER , RIDGE , END)
from http.server import (BaseHTTPRequestHandler , HTTPServer)
except:
raise Exception
class WebServerCreationClass:
def __init__(self) -> str:
self.root = Tk()
self.root.title("WebServer Creator")
self.root.geometry("{0}x{1}".format(350 , 550))
self.root.resizable(0 , 0)
self.root.config(bg = CONST_COLORS[0][0] , cursor = None)
self.tabDashboard = Notebook(master = self.root)
self.firstTab = Frame(self.tabDashboard)
self.secondTab = Frame(self.tabDashboard)
self.outputTab = Frame(self.tabDashboard)
self.svEntryPort = StringVar(self.firstTab)
self.svOptionChs = StringVar(self.firstTab)
self.flaskServer = Flask(__name__)
self.defaultHost : str = "localhost"
self.defaultPort : int = 8080
self.getTime = strftime("%H:%M:%S %p")
self.optionChoices : List[str] = [
"Python http Server" ,
"Django Server" ,
"Flask Server" ,
"Nginx" ,
"Ngrok" ,
"Default (localhost)"
]
self.svEntryPort.set(self.defaultPort)
self.svOptionChs.set(self.optionChoices[2])
@self.flaskServer.route('/')
def ClickEventButton():
newText = self.textToTemplate.get(1.0 , END)
return f"{newText}"
def ButtonEventClicker():
ClickEventButton()
try:
self.flaskServer.debug = True
self.flaskServer.run(
host = "0.0.0.0" ,
port = 8080
)
except Exception:
pass
self.tabDashboard.add(
child = self.firstTab ,
text = "Config"
)
self.tabDashboard.add(
child = self.secondTab ,
text = "Mode"
)
self.tabDashboard.add(
child = self.outputTab ,
text = "Output/Terminal"
)
self.firstTabLabel = Label(
master = self.firstTab ,
text = None ,
background = CONST_COLORS[0][0] ,
width = 82
)
self.labelPort = Label(
master = self.firstTab ,
text = "Port :" ,
background = CONST_COLORS[0][0] ,
foreground = CONST_COLORS[0][1] ,
font = ("Vani" , 22 , font.BOLD) ,
relief = FLAT
)
self.labelServer = Label(
master = self.firstTab ,
text = "Server :" ,
background = CONST_COLORS[0][0] ,
foreground = CONST_COLORS[0][1] ,
font = ("Vani" , 22 , font.BOLD) ,
relief = FLAT
)
self.secondTabLabel = Label(
master = self.secondTab ,
text = None ,
background = CONST_COLORS[0][0] ,
width = 82
)
self.outputtabLabel = Label(
master = self.outputTab ,
text = None ,
background = CONST_COLORS[0][0] ,
width = 82
)
self.entryPort = Entry(
master = self.firstTab ,
textvariable = self.svEntryPort ,
background = CONST_COLORS[0][1] ,
foreground = CONST_COLORS[0][0] ,
font = ("Vani" , 13 , font.BOLD) ,
justify = CENTER ,
width = 25
)
self.optionSelect = Combobox(
master = self.firstTab ,
textvariable = self.svOptionChs ,
values = self.optionChoices ,
font = ("Vani" , 13 , font.BOLD) ,
justify = CENTER
)
self.htmlLabel = Label(
master = self.firstTab ,
text = "HTML" ,
background = CONST_COLORS[0][0] ,
foreground = CONST_COLORS[0][1] ,
font = ("Vani" , 22 , font.BOLD) ,
relief = RIDGE ,
borderwidth = 8 ,
width = 12 ,
justify = CENTER
)
self.textToTemplate = Text(
master = self.firstTab ,
width = 36
)
self.outputTerminal = Text(
master = self.outputTab ,
width = 43 ,
font = ("Courier" , 15 , font.BOLD) ,
background = CONST_COLORS[0][3] ,
foreground = CONST_COLORS[0][2]
)
self.outputTerminal.insert(1.0 , f"Date : {date.today()}\nTime : {self.getTime}")
self.createServerButton = Button(
master = self.firstTab ,
text = "Create Server" ,
command = ButtonEventClicker ,
bg = CONST_COLORS[0][4] ,
fg = CONST_COLORS[0][1] ,
font = ("Vani" , 15 , font.BOLD) ,
relief = RAISED ,
bd = 5
)
self.tabDashboard.pack(
expand = 1 ,
fill = BOTH
)
self.firstTabLabel.place(
x = 0 ,
y = 0 ,
height = 600
)
self.secondTabLabel.place(
x = 0 ,
y = 0 ,
height = 600
)
self.outputtabLabel.place(
x = 0 ,
y = 0 ,
height = 600
)
self.labelPort.place(
x = 0 ,
y = 0
)
self.labelServer.place(
x = 0 ,
y = 60
)
self.entryPort.place(
x = 90 ,
y = 8
)
self.optionSelect.place(
x = 120 ,
y = 68
)
self.createServerButton.place(
x = 100 ,
y = 450
)
self.htmlLabel.place(
x = 78 ,
y = 110
)
self.textToTemplate.place(
x = 25 ,
y = 160 ,
height = 275
)
self.outputTerminal.place(
x = 0 ,
y = 0 ,
height = 524
)
self.htmlLabel.configure(anchor = CENTER)
self.root.mainloop()
# if (platform.system()[0].upper() == "W"):
# WebServerCreationClass()
# else:
# sys.exit(0)
if __name__ == "__main__":
WebServerCreationClass()
และนี่คือ consts.py
from typing import (Dict , List)
from builtins import (int , str)
CONST_COLORS : List[Dict[int , str]] = [
{
0 : "#1D2934" ,
1 : "#ffffff" ,
2 : "#00C300" ,
3 : "#000000" ,
4 : "#33485B"
}
]