Merge pull request #1601 from leonelcamara/port_dialog
Make web2pyDialog Python 3 compatible
This commit is contained in:
+51
-40
@@ -13,7 +13,7 @@ from __future__ import print_function
|
||||
|
||||
import datetime
|
||||
import sys
|
||||
from gluon._compat import StringIO, thread, xrange
|
||||
from gluon._compat import StringIO, thread, xrange, PY2
|
||||
import time
|
||||
import threading
|
||||
import os
|
||||
@@ -134,24 +134,29 @@ class web2pyDialog(object):
|
||||
def __init__(self, root, options):
|
||||
""" web2pyDialog constructor """
|
||||
|
||||
import Tkinter
|
||||
import tkMessageBox
|
||||
if PY2:
|
||||
import Tkinter as tkinter
|
||||
import tkMessageBox as messagebox
|
||||
else:
|
||||
import tkinter
|
||||
from tkinter import messagebox
|
||||
|
||||
|
||||
bg_color = 'white'
|
||||
root.withdraw()
|
||||
|
||||
self.root = Tkinter.Toplevel(root, bg=bg_color)
|
||||
self.root = tkinter.Toplevel(root, bg=bg_color)
|
||||
self.root.resizable(0, 0)
|
||||
self.root.title(ProgramName)
|
||||
|
||||
self.options = options
|
||||
self.scheduler_processes = {}
|
||||
self.menu = Tkinter.Menu(self.root)
|
||||
servermenu = Tkinter.Menu(self.menu, tearoff=0)
|
||||
self.menu = tkinter.Menu(self.root)
|
||||
servermenu = tkinter.Menu(self.menu, tearoff=0)
|
||||
httplog = os.path.join(self.options.folder, self.options.log_filename)
|
||||
iconphoto = os.path.join('extras', 'icons', 'web2py.gif')
|
||||
if os.path.exists(iconphoto):
|
||||
img = Tkinter.PhotoImage(file=iconphoto)
|
||||
img = tkinter.PhotoImage(file=iconphoto)
|
||||
self.root.tk.call('wm', 'iconphoto', self.root._w, img)
|
||||
# Building the Menu
|
||||
item = lambda: start_browser(httplog)
|
||||
@@ -163,16 +168,16 @@ class web2pyDialog(object):
|
||||
|
||||
self.menu.add_cascade(label='Server', menu=servermenu)
|
||||
|
||||
self.pagesmenu = Tkinter.Menu(self.menu, tearoff=0)
|
||||
self.pagesmenu = tkinter.Menu(self.menu, tearoff=0)
|
||||
self.menu.add_cascade(label='Pages', menu=self.pagesmenu)
|
||||
|
||||
#scheduler menu
|
||||
self.schedmenu = Tkinter.Menu(self.menu, tearoff=0)
|
||||
self.schedmenu = tkinter.Menu(self.menu, tearoff=0)
|
||||
self.menu.add_cascade(label='Scheduler', menu=self.schedmenu)
|
||||
#start and register schedulers from options
|
||||
self.update_schedulers(start=True)
|
||||
|
||||
helpmenu = Tkinter.Menu(self.menu, tearoff=0)
|
||||
helpmenu = tkinter.Menu(self.menu, tearoff=0)
|
||||
|
||||
# Home Page
|
||||
item = lambda: start_browser('http://www.web2py.com/')
|
||||
@@ -180,7 +185,7 @@ class web2pyDialog(object):
|
||||
command=item)
|
||||
|
||||
# About
|
||||
item = lambda: tkMessageBox.showinfo('About web2py', ProgramInfo)
|
||||
item = lambda: messagebox.showinfo('About web2py', ProgramInfo)
|
||||
helpmenu.add_command(label='About',
|
||||
command=item)
|
||||
|
||||
@@ -194,10 +199,10 @@ class web2pyDialog(object):
|
||||
else:
|
||||
self.root.protocol('WM_DELETE_WINDOW', self.quit)
|
||||
|
||||
sticky = Tkinter.NW
|
||||
sticky = tkinter.NW
|
||||
|
||||
# Prepare the logo area
|
||||
self.logoarea = Tkinter.Canvas(self.root,
|
||||
self.logoarea = tkinter.Canvas(self.root,
|
||||
background=bg_color,
|
||||
width=300,
|
||||
height=300)
|
||||
@@ -206,22 +211,22 @@ class web2pyDialog(object):
|
||||
|
||||
logo = os.path.join('extras', 'icons', 'splashlogo.gif')
|
||||
if os.path.exists(logo):
|
||||
img = Tkinter.PhotoImage(file=logo)
|
||||
pnl = Tkinter.Label(self.logoarea, image=img, background=bg_color, bd=0)
|
||||
img = tkinter.PhotoImage(file=logo)
|
||||
pnl = tkinter.Label(self.logoarea, image=img, background=bg_color, bd=0)
|
||||
pnl.pack(side='top', fill='both', expand='yes')
|
||||
# Prevent garbage collection of img
|
||||
pnl.image = img
|
||||
|
||||
# Prepare the banner area
|
||||
self.bannerarea = Tkinter.Canvas(self.root,
|
||||
self.bannerarea = tkinter.Canvas(self.root,
|
||||
bg=bg_color,
|
||||
width=300,
|
||||
height=300)
|
||||
self.bannerarea.grid(row=1, column=1, columnspan=2, sticky=sticky)
|
||||
|
||||
Tkinter.Label(self.bannerarea, anchor=Tkinter.N,
|
||||
tkinter.Label(self.bannerarea, anchor=tkinter.N,
|
||||
text=str(ProgramVersion + "\n" + ProgramAuthor),
|
||||
font=('Helvetica', 11), justify=Tkinter.CENTER,
|
||||
font=('Helvetica', 11), justify=tkinter.CENTER,
|
||||
foreground='#195866', background=bg_color,
|
||||
height=3).pack(side='top',
|
||||
fill='both',
|
||||
@@ -230,24 +235,24 @@ class web2pyDialog(object):
|
||||
self.bannerarea.after(1000, self.update_canvas)
|
||||
|
||||
# IP
|
||||
Tkinter.Label(self.root,
|
||||
tkinter.Label(self.root,
|
||||
text='Server IP:', bg=bg_color,
|
||||
justify=Tkinter.RIGHT).grid(row=4,
|
||||
justify=tkinter.RIGHT).grid(row=4,
|
||||
column=1,
|
||||
sticky=sticky)
|
||||
self.ips = {}
|
||||
self.selected_ip = Tkinter.StringVar()
|
||||
self.selected_ip = tkinter.StringVar()
|
||||
row = 4
|
||||
ips = [('127.0.0.1', 'Local (IPv4)')] + \
|
||||
([('::1', 'Local (IPv6)')] if socket.has_ipv6 else []) + \
|
||||
[(ip, 'Public') for ip in options.ips] + \
|
||||
[('0.0.0.0', 'Public')]
|
||||
for ip, legend in ips:
|
||||
self.ips[ip] = Tkinter.Radiobutton(
|
||||
self.ips[ip] = tkinter.Radiobutton(
|
||||
self.root, bg=bg_color, highlightthickness=0,
|
||||
selectcolor='light grey', width=30,
|
||||
anchor=Tkinter.W, text='%s (%s)' % (legend, ip),
|
||||
justify=Tkinter.LEFT,
|
||||
anchor=tkinter.W, text='%s (%s)' % (legend, ip),
|
||||
justify=tkinter.LEFT,
|
||||
variable=self.selected_ip, value=ip)
|
||||
self.ips[ip].grid(row=row, column=2, sticky=sticky)
|
||||
if row == 4:
|
||||
@@ -256,30 +261,30 @@ class web2pyDialog(object):
|
||||
shift = row
|
||||
|
||||
# Port
|
||||
Tkinter.Label(self.root,
|
||||
tkinter.Label(self.root,
|
||||
text='Server Port:', bg=bg_color,
|
||||
justify=Tkinter.RIGHT).grid(row=shift,
|
||||
justify=tkinter.RIGHT).grid(row=shift,
|
||||
column=1, pady=10,
|
||||
sticky=sticky)
|
||||
|
||||
self.port_number = Tkinter.Entry(self.root)
|
||||
self.port_number.insert(Tkinter.END, self.options.port)
|
||||
self.port_number = tkinter.Entry(self.root)
|
||||
self.port_number.insert(tkinter.END, self.options.port)
|
||||
self.port_number.grid(row=shift, column=2, sticky=sticky, pady=10)
|
||||
|
||||
# Password
|
||||
Tkinter.Label(self.root,
|
||||
tkinter.Label(self.root,
|
||||
text='Choose Password:', bg=bg_color,
|
||||
justify=Tkinter.RIGHT).grid(row=shift + 1,
|
||||
justify=tkinter.RIGHT).grid(row=shift + 1,
|
||||
column=1,
|
||||
sticky=sticky)
|
||||
|
||||
self.password = Tkinter.Entry(self.root, show='*')
|
||||
self.password = tkinter.Entry(self.root, show='*')
|
||||
self.password.bind('<Return>', lambda e: self.start())
|
||||
self.password.focus_force()
|
||||
self.password.grid(row=shift + 1, column=2, sticky=sticky)
|
||||
|
||||
# Prepare the canvas
|
||||
self.canvas = Tkinter.Canvas(self.root,
|
||||
self.canvas = tkinter.Canvas(self.root,
|
||||
width=400,
|
||||
height=100,
|
||||
bg='black')
|
||||
@@ -288,19 +293,19 @@ class web2pyDialog(object):
|
||||
self.canvas.after(1000, self.update_canvas)
|
||||
|
||||
# Prepare the frame
|
||||
frame = Tkinter.Frame(self.root)
|
||||
frame = tkinter.Frame(self.root)
|
||||
frame.grid(row=shift + 3, column=1, columnspan=2, pady=5,
|
||||
sticky=sticky)
|
||||
|
||||
# Start button
|
||||
self.button_start = Tkinter.Button(frame,
|
||||
self.button_start = tkinter.Button(frame,
|
||||
text='start server',
|
||||
command=self.start)
|
||||
|
||||
self.button_start.grid(row=0, column=0, sticky=sticky)
|
||||
|
||||
# Stop button
|
||||
self.button_stop = Tkinter.Button(frame,
|
||||
self.button_stop = tkinter.Button(frame,
|
||||
text='stop server',
|
||||
command=self.stop)
|
||||
|
||||
@@ -454,9 +459,12 @@ class web2pyDialog(object):
|
||||
|
||||
def error(self, message):
|
||||
""" Shows error message """
|
||||
|
||||
import tkMessageBox
|
||||
tkMessageBox.showerror('web2py start server', message)
|
||||
if PY2:
|
||||
import tkMessageBox as messagebox
|
||||
else:
|
||||
from tkinter import messagebox
|
||||
|
||||
messagebox.showerror('web2py start server', message)
|
||||
|
||||
def start(self):
|
||||
""" Starts web2py server """
|
||||
@@ -1191,10 +1199,13 @@ def start(cron=True):
|
||||
|
||||
if not options.nogui and options.password == '<ask>':
|
||||
try:
|
||||
import Tkinter
|
||||
if PY2:
|
||||
import Tkinter as tkinter
|
||||
else:
|
||||
import tkinter
|
||||
havetk = True
|
||||
try:
|
||||
root = Tkinter.Tk()
|
||||
root = tkinter.Tk()
|
||||
except:
|
||||
pass
|
||||
except (ImportError, OSError):
|
||||
|
||||
Reference in New Issue
Block a user