Как сделать так, чтобы мой вывод Python tkinter отображался в графическом интерфейсе вместо оболочки Python? - PullRequest
1 голос
/ 21 марта 2019

Я написал программу на python с tkinter, чтобы показать континент каждой из этих четырех стран: Нигерии, Канады, Китая и Австралии - когда пользователь нажимает кнопку «Ввод».Я хочу, чтобы, когда пользователь нажимал кнопку «Ввод», текст в метке ответа должен показывать конкретный континент, к которому относится выбранная страна.

Основная проблема заключается в том, что я не знаю, как сделатьвывод для обновления в метке, видимой в главном окне программы, вместо этого вывод выводится в оболочке Python.(Я новичок в Python tkinter GUI)

=========================== Код =====================================

from functools import partial
import tkinter as tk
from tkinter import *

def serial_port(var):
    selection = var.get()
    # to save space
    text_dict = { 
        1: 'Africa',
        2: 'North America',
        3: 'Asia',
        4: 'Australia'}
    text_to_print = text_dict[selection]
    print(text_to_print) #apparently, I learn I can't use print in GUI but idk what to use in place of print here 


def main():
    root= tk.Tk()
    root.title("Continent")
    root.geometry("500x300")    
    var = IntVar()
    var.set(1)
    #Button to show selected profile to assign FTW
    Lang_1=Radiobutton(root, text='Nigeria', variable=var, value=1, width=20)
    Lang_2=Radiobutton(root, text='Canada', variable=var, value=2, width=20)
    Lang_3=Radiobutton(root, text='Japan', variable=var, value=3, width=20)
    Lang_4=Radiobutton(root, text='Australia', variable=var, value=4, width=20)
    # Button to show entered reg values and data in it
    Enter_Button=Button(root, text='ENTER',command=partial(serial_port, var), relief="ridge", background="Cyan", width=20)

    Lang_1.grid(row=1, column=5)
    Lang_2.grid(row=2, column=5)
    Lang_3.grid(row=3, column=5)
    Lang_4.grid(row=4, column=5)
    Enter_Button.grid(row=7, column=3)
    root.mainloop()

if __name__ == '__main__':
    main

Ответы [ 3 ]

0 голосов
/ 22 марта 2019

Чтобы напечатать текст в графическом интерфейсе tkinter, вам нужен отдельный виджет этикеток.

Проверьте код ниже.Я добавил виджет Return_Label, в котором вы можете изменить конфигурацию и положение так, как вам нравится.Я уверен, что это должно делать то, что вы хотите.

#These variables are made global so both functions can access them
var = None
Return_Label = None


def serial_port():
    global var, Return_Label

    selection = var.get()
    text_dict = {
        1: "Africa",
        2: "North America",
        3: "Asia",
        4: "Australia"}
    text_to_print = text_dict[selection]
    Return_Label.config(text = text_to_print)



def main():
    global var, Return_Label

    root = tk.Tk()
    root.title("Continent")
    root.geometry("500x300")
    var = tk.IntVar()
    var.set(1)

    Lang_1 = tk.Radiobutton(root, text = "Nigeria", variable = var, value = 1, width = 20)
    Lang_2 = tk.Radiobutton(root, text = "Canada", variable = var, value = 2, width = 20)
    Lang_3 = tk.Radiobutton(root, text = "Japan", variable = var, value = 3, width = 20)
    Lang_4 = tk.Radiobutton(root, text = "Australia", variable = var, value = 4, width = 20)

    Enter_Button = tk.Button(root, text = "ENTER", command = serial_port, relief = "ridge", bg = "Cyan", width = 20)

    Return_Label = tk.Label(root)

    Lang_1.grid(row = 1, column = 5)
    Lang_2.grid(row = 2, column = 5)
    Lang_3.grid(row = 3, column = 5)
    Lang_4.grid(row = 4, column = 5)
    Enter_Button.grid(row = 7, column = 3)
    Return_Label.grid(row = 6, column = 3)  #change this to wherever you want it printed
    root.mainloop()

if (__name__ == "__main__"):
    main()
0 голосов
/ 22 марта 2019

использовать функцию Label(). Требуется родительский виджет и текст.

Label(parent, text = "what you want").

0 голосов
/ 21 марта 2019

Ты почти у цели.Вам нужно использовать виджет Entry.

from functools import partial
import tkinter as tk
from tkinter import *

def serial_port(var,entry): #add the Entry widget as variable
    entry.delete(0, 'end') #clear the entry
    selection = var.get()
    text_dict = { 
        1: 'Africa',
        2: 'North America',
        3: 'Asia',
        4: 'Australia'}
    text_to_print = text_dict[selection]
    entry.insert(0,text_to_print) #set the entry


def main():
    root= tk.Tk()
    root.title("Continent")
    root.geometry("500x300")    
    var = IntVar()
    var.set(1)
    entry = Entry() #create the Entry widget
    Lang_1=Radiobutton(root, text='Nigeria', variable=var, value=1, width=20)
    Lang_2=Radiobutton(root, text='Canada', variable=var, value=2, width=20)
    Lang_3=Radiobutton(root, text='Japan', variable=var, value=3, width=20)
    Lang_4=Radiobutton(root, text='Australia', variable=var, value=4, width=20)
    Enter_Button=Button(root, text='ENTER',command=partial(serial_port, var, entry), relief="ridge", background="Cyan", width=20) #pass the Entry widget

    Lang_1.grid(row=1, column=5)
    Lang_2.grid(row=2, column=5)
    Lang_3.grid(row=3, column=5)
    Lang_4.grid(row=4, column=5)
    Enter_Button.grid(row=7, column=3)
    entry.grid(row=8, column=3) #place the Entry widget

    root.mainloop()

if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...