随遇而安8 发表于 2020-7-2 21:23

python中用tkinter实现时遇到困难

昨天学了些tkinter毛皮,今天想动手只做个软件
可以输入文本,输入正则表达式,输出结果
如图,text1是待处理的原始文本,text2是输入的正则表达式,text3是输出结果的地方


我代码问题有点多,先把逻辑写完了

遇到了第一个问题,text3文本显示错误


接着测试功能,又出现了第二个错误
正则取不出内容,程序报错

匹配不出信息先不说

根据错误信息“chars”,我怀疑是正则返回的re1是列表,我赋值给了var而导致的
于是,我进行修改

接着修改,继续报错


实在不晓得咋改了,过来请教
两个问题:
1,正则表达式匹配问题,成不成功全看脸。。是不是正则表达式的字符串不能正确传给text2呢?
正则里还一个group函数问题,啥时候可以用group,啥时候不能用

2,碰巧正则匹配成功,但是也不能传给text3,text3显示不出来的问题。。text3全程看戏,没用

百度上搜出的问题答案,全是一大片,说不到点上,所以来吾爱问问
大小毛病都可以指出,虚心请教

随遇而安8 发表于 2020-7-3 10:41

本帖最后由 随遇而安8 于 2020-7-3 10:46 编辑

importtkinter as tk
import re

root = tk.Tk()
root.title('正则')

var=tk.StringVar()
var.set("还没开始转换...")

def fun():
    txt1 = text1.get('0.0','end')
    txt2 = text2.get('0.0','end')
    print(txt1,txt2)
    text3s=re.findall(text2,text1)
    for x in text3s:
      print(x)
      #将结果赋给var变量
      var.get(x)
      text3.insert(tk.END,var)
   
   
#text1用来接收待处理文本
text1=tk.Text(root,height=10,width=30)
text1.grid(row=1,column=0)

label=tk.Label(root,text="请输入正则文本:")
label.grid(row=0,column=0)

#text2用来接收正则表达式
text2=tk.Text(root,height=1,width=20,bg='yellow',fg='blue')
text2.grid(row=0,column=1)

button=tk.Button(height=5,width=10,text="开始转换",command=fun)
button.grid(row=1,column=1)

#text3用来显示匹配后的结果
text3=tk.Text(root,height=10,width=30)
text3.insert(tk.END,var)
text3.grid(row=2,column=0)

root.mainloop()

Zeaf 发表于 2020-7-2 22:41

我也不懂,楼主解决了能回复我一下么
我感觉的原理
text3s=re.findall(text1,text2)
for x in text3s:
    text3.insert(x,end='\n')

Clinton 发表于 2020-7-2 22:43

用self更新数据吧

ywqn 发表于 2020-7-3 00:32

本帖最后由 ywqn 于 2020-7-3 12:52 编辑

import tkinter as tk
import re
# -*- encoding: utf8 -*-
import tkinter as tk
from tkinter import ttk
from tkinter import Toplevel
import tkinter.filedialog
from tkinter import messagebox
import tkinter.simpledialog
import os
from tkinter import *
from hashlib import md5
import re
import textwrap

import tkinter.font as tkFont
import random

# root = tk.Tk()
# root.title('正则')
#
# var = tk.StringVar()
# var.set("还没开始转换...")
#
#
#
# def fun():
#   txt1 = text1.get('0.0', 'end')
#   txt2 = text2.get('0.0', 'end')
#   print(txt1, txt2)
#   text3s = re.findall(text2, text1)
#   for x in text3s:
#         print(x)
#         # 将结果赋给var变量
#         var.get(x)
#         text3.insert(tk.END, var)
#
#
# # text1用来接收待处理文本
# text1 = tk.Text(root, height=10, width=30)
# text1.grid(row=1, column=0)
#
# label = tk.Label(root, text="请输入正则文本:")
# label.grid(row=0, column=0)
#
# # text2用来接收正则表达式
# text2 = tk.Text(root, height=1, width=20, bg='yellow', fg='blue')
# text2.grid(row=0, column=1)
#
# button = tk.Button(height=5, width=10, text="开始转换", command=fun)
# button.grid(row=1, column=1)
#
# # text3用来显示匹配后的结果
# text3 = tk.Text(root, height=10, width=30)
# text3.insert(tk.END, var)
# text3.grid(row=2, column=0)
#
# root.mainloop()


class Editor:
    def __init__(self, master):
      self.master = master
      self.master.title("正则")

      self.frame = tk.Frame(self.master)
      #
      self.frame.grid()



      text1 = tk.Text(self.frame, height=10, width=30)
      text1.grid(row=1, column=0)
      #
      label = tk.Label(self.frame, text="请输入正则文本:")
      label.grid(row=0, column=0)
      #
      ## text2用来接收正则表达式
      text2 = tk.Text(self.frame, height=1, width=20, bg='yellow', fg='blue')
      text2.grid(row=0, column=1)
      #
      button = tk.Button(height=5, width=10, text="开始转换", command=lambda: self.fun())
      button.grid(row=1, column=1)

      # text3用来显示匹配后的结果
      global text3
      text3 = tk.Text(self.frame, height=10, width=30)
      # text3.insert(tk.END, var)
      text3.grid(row=2, column=0)

    def fun(self, value):
      txt1 = str(value).strip()
      txt2 = str(value).strip()
      print(txt1)
      print(txt2)
      text3s = re.findall(txt2, txt1)
      for x in text3s:
            print(type(x))
            print(x)
            text3.delete(1.0,'end')
            text3.insert('1.0', x)




def main():
    root = tk.Tk()
    app = Editor(root)

    # 设置窗口大小
    winWidth = 600
    winHeight = 600
    # 获取屏幕分辨率
    screenWidth = root.winfo_screenwidth()
    screenHeight = root.winfo_screenheight()

    x = int((screenWidth - winWidth) / 2)
    y = int((screenHeight - winHeight) / 2)

    # 设置窗口初始位置在屏幕居中
    root.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
    #root.geometry("600x600+10+15")

    # 设置窗口图标
    #root.iconbitmap("./icons/Create.ico")
    root.mainloop()




if __name__ == '__main__':
    main()

井右寺 发表于 2020-7-3 08:38

本帖最后由 井右寺 于 2020-7-3 08:40 编辑

group用于正则分组啊 比如 r'({3})+({3})', group(0)就是第一个括号匹配到的内容
还有,正则最好判断一下结果是否为None
可以好好看一下re模块

2、你的var不能插入文本啊,它是一个类。。。。
*.insert(var.get())



另外,后台逻辑不要放在主线程里面做,不然看起来程序死了一样

随遇而安8 发表于 2020-7-3 10:42

Zeaf 发表于 2020-7-2 22:41
我也不懂,楼主解决了能回复我一下么
我感觉的原理
text3s=re.findall(text1,t ...

我试了一下,还是报错,代码贴出来了,您可以试一下

随遇而安8 发表于 2020-7-3 10:46

ywqn 发表于 2020-7-3 00:32
class Employee:
   '所有员工的基类'
   empCount = 0


您是我老哥。。。代码贴出来了,您能帮我看看吗

随遇而安8 发表于 2020-7-3 10:48

Clinton 发表于 2020-7-2 22:43
用self更新数据吧

我是新手,不太懂,您可以帮我修改成self吗,我学习一下

bags 发表于 2020-7-3 13:20

https://www.52pojie.cn/thread-1074755-1-1.html
虽然有时候会闪退,但你值得拥有
页: [1] 2
查看完整版本: python中用tkinter实现时遇到困难