【问题标题】:Problem printing the contents of a text box in another textbox multiline在另一个文本框多行中打印文本框的内容时出现问题
【发布时间】:2021-09-02 18:48:33
【问题描述】:

我正在使用 Tkinter 制作一个小应用程序,用于教育目的,其中包括按下按钮并在另一个多行文本框中显示文本框的内容。

问题是你看到了这个:

<bound method Text.get of <tkinter.Text object.! Text2 >>

而不是我手动编写的文本框的内容。我想在多行文本框(称为文本)中打印的文本框称为 textbox_test。 Textbox_test 被调用

A = f "{test_textbox.get} {'' .join (word2)} {abitanti} abitanti su un'area di {superficie}".

问题与文本框

test_textbox = Text(window,width=10,height=1)
test_textbox.pack()
test_textbox.place(x=5, y=100)

如何消除上述错误并正确显示文本框的文本?我附上完整的代码。谢谢

from tkinter import *
from tkinter import ttk
import tkinter as tk
import sqlite3
import random

window=Tk()
window.title("xxxxxxxx")
window.geometry("750x750")
window.configure(bg='#78c030')

con = sqlite3.connect('/home/xxxxxxxxxxx/Database.db')
cursor = con.cursor()

# Search Data
def city(name_city):
    name_city = city.get()
    cursor.execute('SELECT * FROM Info WHERE City =?',(name_city,))
    results = cursor.fetchone()
    return results


# Print Data in textbox multiline
def write():
    name_city = city.get
    results = city(name_city)
    inhabitants = results[2]
    surface = results[3]

    if categoria.get() == "Test 1" and sottocategoria.get() == "Test 1.1":

        cursor.execute('SELECT xxxxxxxx FROM TableExample ORDER BY RANDOM() LIMIT 1')
        word2 = cursor.fetchone()
        text.delete(1.0,END)
        
        A= f"{test_textbox.get} {''.join(word2)} {inhabitants} inhabitants on an area of {surface}"
        B= f"Che sale a"
        
        text.insert(tk.END, random.choice([A, B]))

   

button2 = Button(window, text="Button2", bg='white', command = write)
button2.pack()
button2.place(x=5, y=330)



### TEXTBOX MULTILINE ###
text = Text(window,width=63,height=38)
text.pack()
text.place(x=180, y=24)

### TEXTBOX ### 
test_textbox = Text(window,width=10,height=1)
test_textbox.pack()
test_textbox.place(x=5, y=100)


### CATEGORIA E SOTTO CATEGORIA ###
cat=StringVar()
sub_cat=StringVar()

def change_val(*args):
    if cat.get() == "Test 1":
        sottocategorias = ["Test 1.1", "Test 1.2", "Test 1.3"]
        sottocategoria.config(values=sottocategorias)
    else:
        sottocategorias = ["aaaa"]
        sottocategoria.config(values=sottocategorias)
    
categorias=["Test 1", "Test 2", "Test 3"]
categoria=ttk.Combobox(window,value=categorias,textvariable=cat,width=16)
categoria.place(x=5, y=25)
cat.set("Scegliere categoria")

sottocategorias=["aaaa"]
sottocategoria=ttk.Combobox(window,textvariable=sub_cat,value=sottocategorias,
width=16)
sottocategoria.place(x=5, y=55)

cat.trace("w",change_val)


### COMBOBOX ###

def combo_nation():
    cursor.execute('SELECT DISTINCT Nation FROM Info')
    result=[row[0] for row in cursor]
    return result

def combo_city(event=None):
    val = city.get()
    cursor.execute('SELECT City FROM Info WHERE Nation = ?', (val,))
    result = [row[0] for row in cursor]
    city['value'] = result
    city.current(0)
    return result


nation=ttk.Combobox(window,state="readonly")
nation['value'] = combo_nation()
nation.bind('<<ComboboxSelected>>', combo_city)
nation.place(x=5, y=150,height = 25, width = 180)


city=ttk.Combobox(window,state="readonly")
city.place(x=5, y=180, height = 25, width = 180)


window.mainloop()

重要提示:如果您尝试更改为 A = f "{test_textbox.get (" 1.0 "," end-1c ")} {'' .join (word2)},那就不好了。该应用程序不会打开。如果没有此代码,则会打开

【问题讨论】:

  • 应该是test_textbox.get('1.0',"end")。您需要提供从Text 小部件获取文本的参数
  • test_textbox.get是一个函数,test_textbox.get()调用这个函数。
  • A = f "{test_textbox.get("1.0", "end-1c")} ...
  • 使用A = f "{test_textbox.get (" 1.0 "," end-1c ")} 后在控制台中运行时是否收到任何错误消息?而且它不是全部价值,而只是您必须以全文替换的部分。 Full 将是 A = f"{test_textbox.get('1.0','end-1c')} {''.join(word2)} {inhabitants} inhabitants on an area of {surface}" 并且当它放在双 " " 中时需要单 ' '
  • 顺便说一句:你不必使用trace - 你可以使用'&lt;&lt;ComboboxSelected&gt;&gt;' 来检测变化。

标签: python python-3.x python-2.7 tkinter


【解决方案1】:

正如@BryanOakley 在评论中所说,您需要get() 来运行它,而小部件Text 需要它带有类似的参数

A = f"{test_textbox.get('1.0','end-1c')} ...

它不起作用,因为它只是您必须以全文替换的部分,但似乎您替换了所有文本。因为您没有在控制台中运行代码,所以您看不到可以解释问题的错误消息

应该是整行

A = f"{test_textbox.get('1.0','end-1c')} {''.join(word2)} {inhabitants} inhabitants on an area of {surface}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多