simpledialog.SimpleDialog в Python с 2 входамиH - PullRequest
0 голосов
/ 28 мая 2018

Я хотел бы знать, возможно ли получить simpledialog.SimpleDialog в python с 2 входами.Документация не ясна по этому вопросу, и я не мог найти какую-либо информацию об этом в Интернете.

Конечный результат, который я хотел бы получить, состоит из следующих строк: Поле ввода с двумя строками по одной для каждой переменной

|---------------------|
|Input 1 | ' text abc'|
|---------------------|
|Input 2 | ' Text fgh'|
|---------------------|

С уважением и заранее спасибо

1 Ответ

0 голосов
/ 29 мая 2018

Я предполагаю, что вы ищете что-то вроде этого:

enter image description here

В официальной документации объясняется, как это сделать все , что намного больше, чем нужно сейчас.

Вам нужен виджет меток, виджет ввода, виджет кнопок и менеджер геометрии упаковщика.

Хороший учебник дляВы можете быть ZetCode , и этот ответ частично основан на его коде:

#### Save this as dual_input.py ####
#! /usr/bin/env python
# -*- coding: utf-8 -*-

from tkinter import Tk, Text, TOP, BOTH, X, N, LEFT, RIGHT
from tkinter.ttk import Frame, Label, Entry, Button

# Good habit to put your GUI in a class to make it self-contained
class SimpleDialog(Frame):

    def __init__(self):
        super().__init__()
        # self allow the variable to be used anywhere in the class
        self.output1 = ""
        self.output2 = ""
        self.initUI()

    def initUI(self):

        self.master.title("Simple Dialog")
        self.pack(fill=BOTH, expand=True)

        frame1 = Frame(self)
        frame1.pack(fill=X)

        lbl1 = Label(frame1, text="Input 1", width=6)
        lbl1.pack(side=LEFT, padx=5, pady=10)

        self.entry1 = Entry(frame1, textvariable=self.output1)
        self.entry1.pack(fill=X, padx=5, expand=True)

        frame2 = Frame(self)
        frame2.pack(fill=X)

        lbl2 = Label(frame2, text="Input 2", width=6)
        lbl2.pack(side=LEFT, padx=5, pady=10)

        self.entry2 = Entry(frame2)
        self.entry2.pack(fill=X, padx=5, expand=True)

        frame3 = Frame(self)
        frame3.pack(fill=X)

        # Command tells the form what to do when the button is clicked
        btn = Button(frame3, text="Submit", command=self.onSubmit)
        btn.pack(padx=5, pady=10)

    def onSubmit(self):

        self.output1 = self.entry1.get()
        self.output2 = self.entry2.get()
        self.quit()

def main():

    # This part triggers the dialog
    root = Tk()
    root.geometry("250x150+300+300")
    app = SimpleDialog()
    root.mainloop()
    # Here we can act on the form components or
    # better yet, copy the output to a new variable
    user_input = (app.output1, app.output2)
    print(app.output1)
    # Get rid of the error message if the user clicks the
    # close icon instead of the submit button
    # Any component of the dialog will no longer be available
    # past this point
    try:
        root.destroy()
    except:
        pass
    # To use data outside of function
    # Can either be used in __main__
    # or by external script depending on
    # what calls main()
    return user_input

# Allow dialog to run either as a script or called from another program
if __name__ == '__main__':
    follow_on_variable = main()
    # This shows the outputs captured when called directly as `python dual_input.py`
    print(follow_on_variable)
#### End of dual_input.py code dialog code file ####

### Example of using from code file as opposed to ###
### calling directly                              ###
### Save this as i_do_work_here.py                ###
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import dual_input

received_inputs = dual_input.main()

calculated = int(received_inputs[0]) * int(received_inputs[1])
print(str(calculated))
### End of i_do_work_here.py  ###
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...