RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1260751
Accepted
Булат
Булат
Asked:2022-03-25 23:20:40 +0000 UTC2022-03-25 23:20:40 +0000 UTC 2022-03-25 23:20:40 +0000 UTC

你好,Tkinter库有问题,为什么我设置为只按条件打开时,'win'窗口会打开'warning_port_baud'窗口?

  • 772

项目链接

my.py是所需的文件。

选择波特率后,需要将 \Arduino\prototype.ino 代码上传到 arduino(第 407 行)

整个代码:

import serial.tools.list_ports
from tkinter import *
from Arduino import Arduino
from win32api import GetSystemMetrics
import time

resx_win = str(int((GetSystemMetrics(0)/2)-(800/2)-9))          #
resy_win = str(int((GetSystemMetrics(1)/2)-(500/2)-35))         #
resx_head = str(int((GetSystemMetrics(0)/2) - (800/2)-9))       # Переменные для расположения окон посередине экрана
resy_head = str(int((GetSystemMetrics(1)/2) - (500/2)-35))      #
warningx_head = str(int((GetSystemMetrics(0)/2)-(300/2)-9))     #
warningy_head = str(int((GetSystemMetrics(1)/2) - (200/2)-35))  #

ports = serial.tools.list_ports.comports()  #
for port, desc, hwid in sorted(ports):      # Инициализация портов(разделение строки
    port                                    # состоящей из нескольких портов ещё не делал)
                                            # <Работает в тестовом режиме>


head = Tk()

head.geometry('800x500+'+resx_head+'+'+resy_head)
head.title('Лаунчер')
head.resizable(width=False, height=False)
head.wm_attributes('-alpha', 0.95)


def warning_port_baud_def():
    warning_port_baud = Tk()
    warning_port_baud.geometry('300x200+' + warningx_head + '+' + warningy_head)
    warning_port_baud.title('Ошибка')
    warning_canvas = Canvas(warning_port_baud, width=300, height=200)
    warning_canvas.pack()
    warning_port_baud_frame = Frame(warning_port_baud)
    warning_port_baud_frame.place(relwidth=1, relheight=1)

    warning_port_baud_label = Label(warning_port_baud_frame,text='Введите \nнеобходимые\n значения '    #
                                                '\nдля порта \nи скорости', font= ("message-box",16))   #
    warning_port_baud_label.place(x=120, y=20, width=180, height=150)                                   # Окно,вылезающее при
    global warning_image                                                                                # некорректном вводе
    warning_image = PhotoImage(file='y_warning.png', master=warning_port_baud_frame)                    # порта или бодрейта
    warning_ico = Label(warning_port_baud_frame, image=warning_image)                                   # Ну и картинка для
    warning_ico.place(x=15, y=43)                                                                       # этого окна
def WinSon():

    port_ch = (var_p.get())         #
    if port_ch == PortList[0]:      # Если в меню не выбран порт,
        port_ch = entry_p.get()     # читает поле ввода
        print(port_ch)              #

    baudrate = (var_bd.get())       #
    if baudrate == BaudList[0]:     # То же самое,
        baudrate = entry_bd.get()   # только уже с бодрейтом
        print(baudrate)             #

    if len(port_ch) or len(baudrate) == 0:  #
        print(len(port_ch))                 # Проверка на длину введённых данных
        print(len(baudrate))                # <Потом добавлю поиск подстроки 'COM'>
        warning_port_baud_def()             #

    board = Arduino(baudrate, port= port_ch)    # Инициализация ардуинки и её порта и скорости
    board.pinMode(13, "OUTPUT")                 # Добавил,пока,просто так
    head.withdraw()
    win = Toplevel()
    win.geometry('800x500+' + resx_win + '+' + resy_win)
    win.title('Набор')

    win.protocol("WM_DELETE_WINDOW", lambda: head.destroy())    # Закрывает окно head,при открытии этого

    canvas2 = Canvas(win,width = 800,height = 500)
    canvas2.pack()
    frame_lobby = Frame(win)
    frame_lobby.place(relwidth = 1,relheight = 1)

    win.mainloop()


canvas = Canvas(head,width = 800,height = 500)
canvas.pack()
frame = Frame(head)
frame.place(relwidth = 1,relheight = 1)


bg = PhotoImage(file = 'bg_800x500.png')    #
wallpaper = Label(frame,image = bg)         # Пикча для BG
wallpaper.pack()                            #


t_p = Label(frame, text='ПОРТ/выбери или напиши', bg='#A52A2A',font = 20)   #
t_p.place(x=20, y = 220, width = 370, height = 60)                          #
PortList = ['Выберите порт', port]                                          #
var_p = StringVar(frame)                                                    # Меню для порта
var_p.set(PortList[0])                                                      #
opt_p = OptionMenu(frame, var_p, *PortList)                                 #
opt_p.place(x=20, y=280, width=185, height=30)                              #

entry_p = Entry(frame,font = 15)                                            # Поле ввода для порта
entry_p.place(x = 205,y = 280,width = 185,height = 30)                      #


t_bd = Label(frame,text = 'БОДРЕЙТ указанный в \nскетче ардуино/выбери или напиши', #
    bg = '#A52A2A',font = 20)                                                       #
t_bd.place(x = 410,y = 220,width = 370,height = 60)                                 #
BaudList = ['Выберите скорость',9600,19200,38400,57600,115200]                      # Меню для бодрейта
var_bd = StringVar(frame)                                                           #
var_bd.set(BaudList[0])                                                             #
opt_bd = OptionMenu(frame, var_bd, *BaudList)                                       #
opt_bd.place(x = 410,y = 280,width = 185,height = 30)                               #

entry_bd = Entry(frame, font=15,bd = 3)                                             # Поле ввода для бодрейта
entry_bd.place(x=595, y=280, width=185, height=30)                                  #


further = PhotoImage(file = 'далее.png')                                            #
small_further = further.subsample(15, 15)                                           # Кнопка и картинка
further_Button = Button(frame,text = 'Далее',image = small_further,                 # выполняет команду
    compound = LEFT,font = ("lucida console", 16),bd = 5,command = WinSon)          # WinSon
further_Button.place(x = 350,y = 370,width = 130,height = 50)                       #


head.mainloop()

条件本身

    if len(port_ch) or len(baudrate) == 0:  #
        print(len(port_ch))                 # Проверка на длину введённых данных
        print(len(baudrate))                # <Потом добавлю поиск подстроки 'COM'>
        warning_port_baud_def()             #
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Булат
    2022-03-28T18:00:59Z2022-03-28T18:00:59Z

    错误是在条件的构造中,下面是错误的选项

    if len(port_ch) or len(baudrate) == 0:  #
        print(len(port_ch))                 # Проверка на длину введённых данных
        print(len(baudrate))                # <Потом добавлю поиск подстроки 'COM'>
        warning_port_baud_def()             #
    

    这已经在工作(正确)

    if len(port_ch) == 0 or len(baudrate) == 0:  #
        print(len(port_ch))                 # Проверка на длину введённых данных
        print(len(baudrate))                # <Потом добавлю поиск подстроки 'COM'>
        warning_port_baud_def()             #
    

    非常感谢Intik帮助我找到错误

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5