Я использую PAGE, чтобы сделать графический интерфейс tkinter. Я с трудом понимаю, как настраивает PAGE, и я не могу получить доступ к виджету ввода.

Я хочу, чтобы моя функция "gimmeInches" выделяла текст в виджете ввода.

У меня есть два файла, ConvertMM и ConvertMM_support. ConvertMM имеет макет графического интерфейса, файл поддержки имеет функции.

Основной файл выглядит так:

#! /usr/bin/env python
#  -*- coding: utf-8 -*-
#
# GUI module generated by PAGE version 4.26
#  in conjunction with Tcl version 8.6
#    Dec 30, 2019 03:32:14 PM PST  platform: Windows NT

import sys

try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk

try:
    import ttk
    py3 = False
except ImportError:
    import tkinter.ttk as ttk
    py3 = True

import ConvertMM_support

def vp_start_gui():
    '''Starting point when module is the main routine.'''
    global val, w, root
    root = tk.Tk()
    ConvertMM_support.set_Tk_var()
    top = Toplevel1 (root)
    ConvertMM_support.init(root, top)
    root.mainloop()

w = None
def create_Toplevel1(root, *args, **kwargs):
    '''Starting point when module is imported by another program.'''
    global w, w_win, rt
    rt = root
    w = tk.Toplevel (root)
    ConvertMM_support.set_Tk_var()
    top = Toplevel1 (w)
    ConvertMM_support.init(w, top, *args, **kwargs)
    return (w, top)

def destroy_Toplevel1():
    global w
    w.destroy()
    w = None

class Toplevel1:
    def __init__(self, top=None):
        '''This class configures and populates the toplevel window.
           top is the toplevel containing window.'''
        _bgcolor = '#000000'  # X11 color: 'black'
        _fgcolor = '#838383'  # Closest X11 color: 'gray51'
        _compcolor = '#d9d9d9' # X11 color: 'gray85'
        _ana1color = '#d9d9d9' # X11 color: 'gray85'
        _ana2color = '#ececec' # Closest X11 color: 'gray92'
        font19 = "-family Consolas -size 16 -weight normal -slant "  \
            "roman -underline 0 -overstrike 0"
        font20 = "-family {Courier New} -size 16 -weight bold -slant "  \
            "roman -underline 0 -overstrike 0"

        top.geometry("213x133+905+93")
        top.minsize(120, 1)
        top.maxsize(3844, 1061)
        top.resizable(1, 1)
        top.title("Gimme Inches")
        #top.iconbitmap('PURPYANG.ICO')
        top.configure(background="#000000")

        self.Entry1 = tk.Entry(top)
        self.Entry1.place(relx=0.15, rely=0.15,height=40, relwidth=0.7)
        self.Entry1.focus_set()
        self.Entry1.configure(background="#000000")
        self.Entry1.configure(disabledforeground="#a3a3a3")
        self.Entry1.configure(font=font20)
        self.Entry1.configure(foreground="#999999")
        self.Entry1.configure(highlightbackground="#730e8c")
        self.Entry1.configure(insertbackground="#730e8c")
        self.Entry1.configure(justify='center')
        self.Entry1.configure(textvariable=ConvertMM_support.inputVAR)
        self.Entry1.bind('<Return>', ConvertMM_support.enter)

        self.Button1 = tk.Button(top)
        self.Button1.place(relx=0.15, rely=0.526, height=40, width=149)
        self.Button1.configure(activebackground="#730e8c")
        self.Button1.configure(activeforeground="white")
        self.Button1.configure(activeforeground="#838383")
        self.Button1.configure(background="#000000")
        self.Button1.configure(command=ConvertMM_support.gimmeInches)
        self.Button1.configure(disabledforeground="#a3a3a3")
        self.Button1.configure(font=font19)
        self.Button1.configure(foreground="#838383")
        self.Button1.configure(highlightbackground="#000000")
        self.Button1.configure(highlightcolor="black")
        self.Button1.configure(pady="0")
        self.Button1.configure(text='''Gimme Inches''')

if __name__ == '__main__':
    vp_start_gui()

И мой файл поддержки выглядит так:

#! /usr/bin/env python
#  -*- coding: utf-8 -*-
#
# Support module generated by PAGE version 4.26
#  in conjunction with Tcl version 8.6
#    Dec 30, 2019 03:31:08 PM PST  platform: Windows NT

import sys

try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk

try:
    import ttk
    py3 = False
except ImportError:
    import tkinter.ttk as ttk
    py3 = True

def set_Tk_var():
    global inputVAR
    inputVAR = tk.StringVar()

def gimmeInches():
    _in = float(inputVAR.get())
    _out = round(_in / 25.4, 5)
    inputVAR.set(_out)
    root.Toplevel1.top.Entry1.selection_range(0, END)   ### here is where i am failing
    root.clipboard_clear()
    root.clipboard_append(_out)


    sys.stdout.flush()

def enter(event):
    gimmeInches()

def init(top, gui, *args, **kwargs):
    global w, top_level, root
    w = gui
    top_level = top
    root = top

def destroy_window():
    # Function which closes the window.
    global top_level
    top_level.destroy()
    top_level = None

if __name__ == '__main__':
    import ConvertMM
    ConvertMM.vp_start_gui()

Как я могу получить доступ к виджету отсюда? Благодарность!

-1
JonRob8 1 Янв 2020 в 20:45
Ваш вопрос в том, как сделать так, чтобы виджет отображался независимо от того, какой файл запущен?
 – 
BSQL
1 Янв 2020 в 21:28
Нет, я хочу, чтобы функция "gimmeInches" выделяла / выделяла текст в виджете ввода. Мне не хватает базового понимания, и я не могу задать правильный вопрос. И поскольку это делается с помощью init , я не знаю, как это назвать. Спасибо за помощь!
 – 
JonRob8
1 Янв 2020 в 21:36
 – 
BSQL
1 Янв 2020 в 21:51
Да и нет, я понял это, и он делает то, что мне нужно. widget = root.focus_get () widget.selection_range (0, 'конец')
 – 
JonRob8
1 Янв 2020 в 22:05

1 ответ

Я не думаю, что я получил понимание, которое я был после, но действительно нашел способ. эти две строки кода сделали свое дело.

def gimmeInches():
    _in = float(inputVAR.get())
    _out = round(_in / 25.4, 5)
    inputVAR.set(_out)
    widget = root.focus_get()         ## this
    widget.selection_range(0, 'end')  ## and this
    root.clipboard_clear()
    root.clipboard_append(_out)

Если вы знаете другой способ, пожалуйста, поделитесь. Благодарность!

0
JonRob8 1 Янв 2020 в 22:13