簡體   English   中英

將 output 文本存儲在 tkinter 文本框中

[英]storing output text in a tkinter textbox

我正在尋找 output 文本文件和 tkinter 文本框的文本列表。 目前我正在努力打印到保存在同一文件夾中的文本文件。 我希望將相同的列表打印在屏幕上的 outputToScreen 文本框中

根據我的研究,我認為我應該使用 .insert(index, text) 但我無法使這種方法起作用。 我也看到了一些使用 a.set function 的舊代碼,但是當我嘗試這個時,我遇到了一個錯誤,說文本框沒有那個方法

#file -> gui.py
# IMPORT tkinter for GUI creation and import scripts for functions
from tkinter import *
from tkinter.ttk import *
import scripts
import customtkinter
windowDim = str(750)+'x'+str(600)
window = customtkinter.CTk()

window.title("INFO GENERATOR")
window.geometry(windowDim)
window.resizable(True, True)
# Modes: system (default), light, dark
customtkinter.set_appearance_mode("dark")
# Themes: blue (default), dark-blue, green
customtkinter.set_default_color_theme("customTkinterTheme.json")

outputToScreen = customtkinter.CTkTextbox(window , width=400 , height=200)
outputToScreen.place(x=200, y=300)

def popupmsg(msg):
    popup = customtkinter.CTk()
    popup.title("!")
    label = customtkinter.CTkLabel(popup, text=msg,)
    label.pack(side="top", fill="x", pady=10)
    B1 = customtkinter.CTkButton(popup, text="Okay", command=popup.destroy)
    B1.pack()
    popup.mainloop()


# create main window
# window specs are 700 x 350 and window is not able to be resizeable

# CREATING USER CONTROLS
# each button will print a list of items (number of items will be come from the entry userValue)
userEntry = customtkinter.CTkEntry(window)
# userValue = int(userValue)

userValue = ""

userEntry.place(x=325, y=200)
userEntry.insert(0, userValue)


userValueLabel = customtkinter.CTkLabel(
    window, text="ENTER AMOUNT OF RECORDS YOU WOULD LIKE").place(x=275, y=170)
label = customtkinter.CTkLabel(window, text="INFOMATION GENERATOR by Noah Mackay "
                               ).pack()


def outputEmails(userValue):
    # function receives the amount of records the user wants to print
    # function will be called when email button is clicked
    # this function will clear the output file and then read open it
    # will call the generateEmail function from scripts.py file
    # outputs the amount of records based on the user input in the entry text box
    userValue = int(userEntry.get())
    outputFile = scripts.generateEmail(userValue)
    file = open('output.txt', 'w').close()
    file = open('output.txt', 'w')
    file.write(str(outputFile))
    outputToScreen.set(outputFile)
    popupmsg("PRINTING WORKED")
   
    

def outputNames(userValue):
    # function receives the amount of records the user wants to print
    # function will be called when email button is clicked
    # this function will clear the output file and then read open it
    # will call the generateEmail function from scripts.py file
    # outputs the amount of records based on the user input in the entry text box
    userValue = int(userEntry.get())
    outputFile = scripts.generateName(userValue)
    file = open('output.txt', 'w').close()
    file = open('output.txt', 'w')
    file.write(str(outputFile))
    outputToScreen.set(outputFile)
    popupmsg("PRINTING COMPLETED")
   

def outputCost(userValue):
    userValue = int(userEntry.get())
    outputFile = scripts.generateCost(userValue)
    file = open('output.txt', 'w').close()
    file = open('output.txt', 'w')
    file.write(str(outputFile))
    outputToScreen.set(outputFile)
    popupmsg("PRINTING COMPLETED")
   

def outputProduct(userValue):
    userValue = int(userEntry.get())
    outputFile = scripts.generateProduct(userValue)
    file = open('output.txt', 'w').close()
    file = open('output.txt', 'w')
    file.write(str(outputFile))
    outputToScreen.set(outputFile)
    popupmsg("PRINTING COMPLETED")


def outputPhoneNumber(userValue):
    userValue = int(userEntry.get())
    outputFile = scripts.generatePhoneNumber(userValue)
    file = open('output.txt', 'w').close()
    file = open('output.txt', 'w')
    file.write(str(outputFile))
    outputToScreen.insert(0,outputFile)
    popupmsg("PRINTING COMPLETED")
    
# creates 5 buttons each have their respective output function attached using command=


emailButton = customtkinter.CTkButton(window, text="EMAILS",
                                      command=lambda: outputEmails(userValue)).place(x=5, y=40)


productButton = customtkinter.CTkButton(window, text="PRODUCTS",
                                        command=lambda: outputProduct(userValue)).place(x=150, y=40)
phoneNumberButton = customtkinter.CTkButton(
    window, text="PHONE NUMBERS" , command= lambda:outputPhoneNumber(userValue)).place(x=300, y=40)
costButton = customtkinter.CTkButton(window, text="PRICES",
                                     command=lambda: outputCost(userValue)).place(x=450, y=40)
nameButton = customtkinter.CTkButton(
    window, text="FIRST + LAST NAMES", command=lambda: outputNames(userValue)).place(x=600, y=40)



window.mainloop()
#file -> scripts.py
import random


def generateName(numberOfItemsNeed):
    # opens 2 files. One containing first names and the other containing last names
    firstNameFile = open('dataFiles\FirstNamesData.txt', 'r')
    lastNameFile = open('dataFiles\LastNamesData.txt', 'r')
    # builds values for the while statement and the return string
    returnValue = ""
    counter = 0

# builds the return string using a while loop and removing the newline character
# after each line from both files when being read
    while counter < int(numberOfItemsNeed):
        returnValue += str(firstNameFile.readline().strip("\n")
                           ) + " " + str(lastNameFile.readline().strip("\n")) + "\n"
        counter = counter + 1
# returns a list of "human" names in a single string divided by a newline character
    return (returnValue)


def generateEmail(numberOfItemsNeed):
    # opens a file containing a records of first names
    firstNameFile = open('dataFiles\dictonary.txt', 'r')
    counter = 0
    # A list of commonly used email address suffixs
    suffix = ['@gmail.com', '@gmail.ca', '@hotmail.com',
              '@hotmail.ca', '@mail.com ', '@mail.ca', '@gov.ca']
    returnValue = ""

    while counter < int(numberOfItemsNeed):
        returnValue += firstNameFile.readline().strip("\n") + \
            str((random.randrange(0, 100))) + \
            suffix[random.randrange(0, len(suffix))]+'\n'
        counter = counter + 1
    return (returnValue)


def generateCost(numberOfItemsNeed):
    # generates a random item price in the inclusive range of 0.00$ to 1000.99$
    counter = 0
    cost = ""
    while counter < int(numberOfItemsNeed):
        cost += '$' + str(random.randrange(0, 1000)) + \
            "." + str(random.randrange(0, 99)) + '\n'
        counter = counter+1
    return cost


def generateProduct(numberOfItemsNeed):
    counter = 0
    returnValue = ""
    productList = open('dataFiles\itemData.txt', 'r')
    while counter < int(numberOfItemsNeed):
        returnValue += str(productList.readline()
                           ).strip("\n") + str(generateCost(1))
        counter = counter + 1
    return (returnValue)


def generatePhoneNumber(numberOfItemsNeed):
    counter = 0
    returnValue = ""
    while counter < int(numberOfItemsNeed):

        firstNumber = str(random.randrange(100, 999))
        secondNumber = str(random.randrange(1000, 9999))
        thirdNumber = str(random.randrange(100, 999))

        returnValue += firstNumber + "-" + secondNumber + "-" + thirdNumber + '\n'
        counter = counter + 1
    return (returnValue)


def shuffleFile(filePath):
    lines = open(filePath).readlines()
    random.shuffle(lines)
    open(filePath, 'w').writelines(lines)
        
# shuffleFile('dataFiles\dictonary.txt')

文本小部件索引是line.character形式的字符串,行從 0 開始,字符從 1 開始。因此,要在開頭插入,您需要使用索引“1.0”,而不是 0。如果您想在末尾插入您可以使用特殊索引"end" 如果小部件為空,則"1.0""end"會產生相同的結果。

outputToScreen.insert("1.0", outputToFile)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM