RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-408895

Анатолий Михеенко's questions

Martin Hope
Анатолий Михеенко
Asked: 2022-08-03 20:35:25 +0000 UTC

来自 tkinter 的 Python 按钮执行命令中的函数,直到单击按钮 [关闭]

  • 0
关闭 这个问题是题外话。目前不接受回复。

1 年前关闭。

  • 寻求调试帮助的问题(“为什么这段代码不起作用? ”)应该包括期望的行为、具体的问题或错误,以及在问题中重现它的最少代码。没有明确描述问题的问题对其他访问者毫无用处。请参阅如何创建一个最小的、独立的和可重现的示例。
  • 该问题是由不再复制的问题或错字引起的。虽然类似问题可能与本网站相关,但该问题的解决方案不太可能帮助未来的访问者。通常可以通过在发布问题之前编写和研究一个最小程序来重现问题来避免此类问题。
改进问题

该功能buttons_logic每1秒循环执行一次,而我没有按下按钮,我做错了什么?当我尝试自己按键时,该功能也被执行

# -*- coding: utf-8 -*-
from Tkinter import *

root = Tk()
def buttons_logic():
    print('buttons_logic')

widget_var = Button(root, bg = "green4",\
                    fg = "white", font = "Arial 9 bold", \
                    width = 8, text = 'вкл\выкл',\
                    command = buttons_logic)
widget_var.pack(padx = 1, pady = 1, side = LEFT) 

root.mainloop()

在此处输入图像描述

在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2022-07-29 21:11:26 +0000 UTC

为什么函数会随着时间变慢?

  • 8

有一个函数可以在给定坐标处移动鼠标,但是过了一会儿,执行函数的时间变长了

尝试使用pyautogui模块库moveTo相同的结果

ps python 2.7,Windows 7

import keyboard
import time
import gc

from external_modules.AutoHotPy.AutoHotPy import AutoHotPy

auto = AutoHotPy()
        
def area_screenshot(coordinates):
    for coord in coordinates:
        x_cur, y_cur = coord[0], coord[1]
        auto.sendToDefaultMouse(x_cur, y_cur)

coordinates = [[123,456],[1135,575],[1000,546],[456,900],[900,241],[234,64],[234,352],
               [123,456],[1135,575],[1000,546],[456,900],[900,241],[234,64],[234,352],
               [123,456],[1135,575],[1000,546],[456,900],[900,241],[234,64],[234,352]]

while 1:
    start = time.clock()
    area_screenshot(coordinates)
    print('area_screenshot: {}'.format((time.clock() - start)))
    
    if keyboard.is_pressed('0'):
        break 

在此处输入图像描述

在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2022-04-02 05:41:53 +0000 UTC

如何使用线程减少 CPU 负载?

  • 1

有一个主文件和一堆辅助模块,其中的代码应该实时执行,同时我们设法使用线程Thread和循环来实现这一点While true,(我是初学者,不要'不要扔石头),但是当线程数达到6同时执行时,处理器及其所有内核开始达到100%,如果有人对循环模块的并行执行有更有效的解决方案,我将非常感激

下面是一个带有启动模块逻辑的主文件示例,只有这里它们同时启动(模拟启动),只有 2 个模块,我启动 6 个模块

# -*- coding: utf-8 -*-

from threading import Thread
import keyboard
import time

class main:
    def __init__(self):
        self.start = False
        self.stop = False
        self.exit = False

    def module_one(self):
        while True:
            if self.start == True:
                self.stop = False
                while True:
                    if self.stop == True:
                        self.start = False
                        break
                    time.sleep(1)
                    print('Start module one')
            if self.exit == True:
                break

    def module_two(self):
        while True:
            if self.start == True:
                self.stop = False
                time.sleep(1)
                while True:
                    if self.stop == True:
                        self.start = False
                        time.sleep(1)
                        break
                    time.sleep(1)
                    print('Start module two')
            if self.exit == True:
                break


    def run_programm(self):
        while True:
            if keyboard.is_pressed('9'):
                print('Start programm')
                self.start = True
                while True:
                    if keyboard.is_pressed('0'):
                        print('Stop programm')
                        self.stop = True
                        break
            if keyboard.is_pressed('8'):
                self.exit = True
                break

if __name__ == "__main__":
    object_main = main()

    RUN_CYCLES = Thread(target = object_main.run_programm)
    RUN_CYCLES.start()

    MODULE_ONE_CYCLE = Thread(target = object_main.module_one)
    MODULE_TWO_CYCLE = Thread(target = object_main.module_two)

    MODULE_ONE_CYCLE.start()
    MODULE_TWO_CYCLE.start()

    MODULE_ONE_CYCLE.join()
    MODULE_TWO_CYCLE.join()

    RUN_CYCLES.join()

ps 需要用python 2写程序,我用python 2.7写的

python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2022-03-22 04:51:36 +0000 UTC

python 3如果我知道它们的颜色,如何找到具有相同像素的区域的坐标?

  • 0

我不知道如何找到具有相同像素的区域并获取这些区域的坐标?我尝试循环遍历所有像素,但时间太长了。

您要在其中查找具有白色像素的区域的图像 在此处输入图像描述

获取这些区域的坐标(为清楚起见,在框架中突出显示) 在此处输入图像描述

整个代码


from PIL import Image, ImageChops
from pathlib import Path
from mss import mss
import numpy as np
import pyautogui
import keyboard
import time


class Object_search:
    def __init__(self):
        self.BASE_DIR = Path(__file__).resolve().parent

    def screenshot(self):
        image_1 = pyautogui.screenshot(region = (0, 0, 1920, 1080))
        time.sleep(0.1)
        image_2 = pyautogui.screenshot(region = (0, 0, 1920, 1080))
        return image_1, image_2

    def comparison(self, image_1, image_2):
        result = ImageChops.difference(image_1, image_2)
        result = result.convert('L')
        result = result.point(lambda x: 0 if x < 1 else 255, '1')
        result.save(r'{}\data\screenshot\screen.png'.format(self.BASE_DIR))
        return result

while True:
    if keyboard.is_pressed('5'):
        print('screenshot')
        image = Object_search().screenshot()
        time.sleep(0.1)
    elif keyboard.is_pressed('6'):
        print('comparison')
        comparison = Object_search().comparison(image[0], image[1])
        time.sleep(0.1)
    elif keyboard.is_pressed('8'):
        print('exit')
        time.sleep(0.1)```
python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2022-03-19 21:04:09 +0000 UTC

如何获取图像中物体的坐标?

  • 1

有一个脚本可以拍摄第一个屏幕截图

def screenshot_one(self):
        image_1 = pyautogui.screenshot(region = (5, 169, 1427, 559))
        image_1.save(r'{}\data\screenshot\image_1.png'.format(self.BASE_DIR))
        return image_1

在此处输入图像描述

第二个截图

def screenshot_two(self):
        image_2 = pyautogui.screenshot(region = (5, 169, 1427, 559))
        image_2.save(r'{}\data\screenshot\image_2.png'.format(self.BASE_DIR))
        return image_2

在此处输入图像描述

然后找出它们之间的区别

def comparison(self, image_1, image_2):
        result = ImageChops.difference(image_1, image_2)
        result.save(r'{0}\data\screenshot\screen.png'.format(self.BASE_DIR))

在此处输入图像描述

如何获取1920х1080脚本突出显示的对象在屏幕上的坐标作为第一张和第二张截图之间的差异,即第三张截图上白色圆圈的坐标?

整个代码

# -*- coding: utf-8 -*-

from PIL import Image, ImageChops
from pathlib import Path
import pyautogui
import keyboard
import time

class Object_search:
    def __init__(self):
        self.BASE_DIR = Path(__file__).resolve().parent

    def screenshot_one(self):
        image_1 = pyautogui.screenshot(region = (5, 169, 1427, 559))
        image_1.save(r'{}\data\screenshot\image_1.png'.format(self.BASE_DIR))
        return image_1

    def screenshot_two(self):
        image_2 = pyautogui.screenshot(region = (5, 169, 1427, 559))
        image_2.save(r'{}\data\screenshot\image_2.png'.format(self.BASE_DIR))
        return image_2

    def comparison(self, image_1, image_2):
        result = ImageChops.difference(image_1, image_2)
        result.save(r'{0}\data\screenshot\screen.png'.format(self.BASE_DIR))

while True:
    if keyboard.is_pressed('5'):
        print('image_1')
        image_1 = Object_search().screenshot_one()
        time.sleep(0.1)
    elif keyboard.is_pressed('6'):
        image_2 = Object_search().screenshot_two()
        print('image_2')
        time.sleep(0.1)
    elif keyboard.is_pressed('7'):
        print('comparison')
        comparison = Object_search().comparison(image_1, image_2)
        time.sleep(0.1)
    elif keyboard.is_pressed('8'):
        print('exit')
        break
python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2022-03-04 20:10:32 +0000 UTC

如何打开位于目录中较高位置的文件?

  • 0

Python脚本路径:папка1\папка2\скрипт.py 从这个脚本中,使用os.open,你需要打开一个位于路径上的文本文档, папка1\текстовый файл.txt如何实现呢?

python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2022-01-07 20:21:28 +0000 UTC

Label 文本标签中没有显示文本是什么原因?

  • 1

有2个框架One_line,Two_line第一个有一个文本标签Day,其参数由类对象确定call_Text,第二个有一个文本标签Month,其参数在Text调用类对象时在类内部确定call_Text,但两者都不是第一种也不在第二种情况下显示文本,这很奇怪,其他一切都是彩色文本标签背景,大小,显示,我做错了什么? 在此处输入图像描述

from tkinter import *
import tkinter as tk


root = Tk()
root.title('Python')
root.geometry('605x80')
root.resizable(width = False, height = False)


class Frames():
    List_frames = []
    def __init__(self, background_line, width_line, height_line):
        self.background_line = background_line
        self.width_line = width_line
        self.height_line = height_line 
        self.List_name_frames = ['One_line', 'Two_line']
        
        for name_line in self.List_name_frames:
            name_line = Frame(root, background = self.background_line, \
                              width = self.width_line, height = self.height_line)
            self.List_frames.append(name_line)
        
        for line in self.List_frames:
            line.pack(anchor = W)
            line.pack_propagate(False)
  
    
class Text():
    def __init__(self, text, font_text, bg_text, fg_text, width_texts, height_texts):
        self.Pixel_Virtual = tk.PhotoImage(width = 1)
        self.text = text
        self.bg_text = bg_text
        self.font_text = font_text
        self.fg_text = fg_text
        self.width_text = width_texts
        self.height_texts = height_texts
        
        Day = Label(Frames.List_frames[0], image = self.Pixel_Virtual, 
                    text = self.text, bg = self.bg_text, font = self.font_text,
                    fg = self.fg_text, width = self.width_text,
                    height = self.height_texts)
        Day.pack(side = LEFT) 
        
        Month = Label(Frames.List_frames[1], image = self.Pixel_Virtual, 
                    text = "Месяц", bg = 'aqua', font = 'Arial 14',
                    fg = 'black', width = 140, height = 40)
        Month.pack(side = LEFT)


call_Frames = Frames('olivedrab', 605, 40)

call_Text = Text("День", 'Arial 14', 'green', 'black', 140, 40) 


root.mainloop()
python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2022-01-07 16:04:53 +0000 UTC

如何将列表从一个班级传递到另一个班级?

  • 0

Label在类小部件中,Text您需要指定在类中创建的框架中的成员资格Frames,值,或者更确切地说是框架列表,带有参数,存储在列表中self.List_frames,您需要将此列表传递给类Text,然后Label通过索引在小部件中指示它属于列表中的框架之一,实现它的最佳方法是什么?

from tkinter import *
import tkinter as tk


root = Tk()
root.title('Python')
root.geometry('605x400')
root.resizable(width = False, height = False)


# Класс реализации фреймов
class Frames():
    # Инициализация заданых параметров
    def __init__(self, background_line, width_line, height_line):
        self.background_line = background_line
        self.width_line = width_line
        self.height_line = height_line
        # Лист фреймов 
        self.List_frames = []
        # Лист имен фреймов 
        self.List_name_frames = ['One_line', 'Two_line', 'Three_line', 'Four_line', \
                                 'Five_line', 'Six_line', 'Seven_line', 'Eight_line',\
                                 'Nine_line', 'Ten_line']
        
        # Создание фреймов, присвоение параметров к фреймам, запись фреймов в список
        for name_line in self.List_name_frames:
            name_line = Frame(root, background = self.background_line, \
                              width = self.width_line, height = self.height_line)
            self.List_frames.append(name_line)
        
        # Вызов созданных фреймов с параметрами на экран
        for line in self.List_frames:
            line.pack(anchor = W)
            line.pack_propagate(False)
  
    

# Класс реализации текста
class Text():
    def __init__(self, text, background_text, font_text, foreground_text, width_texts):
        self.Pixel_Virtual = tk.PhotoImage(width = 1)
        self.text = text
        self.background_text = background_text
        self.font_text = font_text
        self.foreground_text = foreground_text
        self.width_text = width_texts
        
        # Создание текстового поля [День:]
        Day = Label(image = self.Pixel_Virtual, text = self.text,
                    background = self.background_text, font = self.font_text,
                    foreground = self.foreground_text, width = self.width_text)
        

# Создаем обьект класса фреймов
# Параметры: цвет фона, ширина, высота
call_Frames = Frames('olivedrab', 605, 40)

# Создаем обьект класса текста
# Параметры: текст, цвет фона, стиль текста, цвет текста, ширина блока с текстом
call_Text = Text('День', 'green', 'Arial 12', 'black', 40) 

root.mainloop()
python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-12-18 20:21:33 +0000 UTC

如何强制 for 循环遍历在 for 循环中修改的新列表的修改列表?

  • 1

数字和算术符号被索引切割后,相同的字符被删除相同的索引,但循环计数for不是从列表的开头开始term_list,如何制作列表term_list,即指标i,n从更新列表的第一个term_list?

term_list = ['2', '3', '+', '2', '6', '-', '2', '1', '*', '2', '/', '2', '.', '2']
  
# Список чисел и ариф.знаков строки ввода
Input_line_numbers = []

print(term_list, '\n')
# Создание списка с конкатенированными числами и ариф.знаками
for i, n in enumerate(term_list):
    print('Я индекс: ', i, ' - Я число: ', n, '\n')
    if n in ("+", "-", "*", "/"):
        print('Нашел арифметическое действие: ', n)
        print('До: ', term_list)
        print('До: ', Input_line_numbers, '\n')
        # Делаем вырезку в отдельный список от первого знака и 
        # до знака арифметики
        Input_line_numbers.append(''.join(term_list[0:i]))
        # Удоляем часть списка от первого знака и до знака арифметики
        del term_list[0:i]
        # Вырезаем сам знак арифметики
        Input_line_numbers.append(''.join(term_list[0]))
        # Удоляем знак арифметики
        del term_list[0]
        print('После: ', term_list)
        print('После: ', Input_line_numbers, '\n')

# Вызераем в отдельный список последнее число
Input_line_numbers.append(''.join(term_list[0:]))   
# Удоляем последнее число из списка
del term_list[0:]

print(Input_line_numbers)  

在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-12-16 21:11:42 +0000 UTC

是什么导致 _tkinter.TclError: bad entry index 错误?

  • 0

一切正常,当我按下键时,输入行的最后一个字符entry被删除←,在不知道发生了什么并且出现这样的错误之后,如何修复它,它甚至意味着什么?неверный индекс записи "end-2c,在此之前为什么它是真的?是什么改变让他不忠?也许有人会看到,我显然错过了一些东西 在此处输入图像描述

程序代码:

from tkinter import *
import tkinter as tk

# Создания кона приложения
root = Tk()
# Название окна
root.title('Python')
# Размеры окна
root.geometry('205x298')
# Запрет пользователя на изменение рамеров окна
root.resizable(width = False, height = False)




def Calculator():
    while True:
        term = Expression.get("1.0", END)
        term = term[0:-1]
        long_term = len(term)
                
        # Все индексы символов введеных пользователем
        index = []
            
        # Проводим проверку ввода пользователя
        if long_term > 0:
            # Получаем индекс каждого введеного пользователем символа
            while long_term > 0:
                long_term = long_term - 1
                index.insert(0,long_term)
        elif long_term == 0: 
            break
            
        # Все элементы строки введеной пользователем
        term_list = [term[i] for i in index]
        
        # Выход из функции если в поле ввода нет арифметических знаков 
        if set(["+" ,"-" ,"*" ,"/"]).isdisjoint(term_list) == True:
            print('Не найденно арифметическое действие!')
            Expression.delete("1.0", END)
            break
                    
        return term_list
        break


def Arithmetic_action_Plus():
    term = Decision.get()
    Expression.insert(END, term)
    Expression.insert(END, ' ' + '+' + ' ')
    Decision.delete(0, END)

def Plus_Act():
    Arithmetic_action_Plus()
    Calculator()

    
def Arithmetic_action_Minus():
    term = Decision.get()
    Expression.insert(END, term)
    Expression.insert(END, ' ' + '-' + ' ')
    Decision.delete(0, END)
def Minus_Act():
    Arithmetic_action_Minus()
    Calculator()


def Arithmetic_action_Mult():
    term = Decision.get()
    Expression.insert(END, term)
    Expression.insert(END, ' ' + '*' + ' ')
    Decision.delete(0, END)
def Mult_Act():
    Arithmetic_action_Mult()
    Calculator()
        

def Clear_fields_Act():
    Expression.delete("1.0", END)
    Decision.delete(0, END)


def Arithmetic_action_Division():
    term = Decision.get()
    Expression.insert(END, term)
    Expression.insert(END, ' ' + '/' + ' ')
    Decision.delete(0, END)
def Division_Act():
    Arithmetic_action_Division()
    Calculator()
            

def Equally_Act():
    while True:
        term = Decision.get()
        Expression.insert(END, term)
        term_list = Calculator()
        
        # Выход из функции если поле ввода пусто
        if term_list == None:
            break
            
        # Список значений ариф.знаков
        variable_arithmetic = []
        # Список чисел и ариф.знаков строки ввода
        Input_line_numbers = []
        # Список индексов списка чисел и ариф.знаков
        index_arithmetic = []
        
        # Создание списка с конкатенированными числами и ариф.знаками
        for n in term_list.copy():
            if n in ("+", "-", "*", "/"):
                #Узнаем индекс ариф.знака
                index = term_list.index(n)
                #Делаем вырезку в отдельный список от первого знака и до знака ариф.
                Input_line_numbers.append(''.join(term_list[0:index]))
                #Удоляем часть списка от первого знака и до знака арифметики
                del term_list[0:index]
                #Вырезаем в отдельный список сам знак арифметики
                Input_line_numbers.append(''.join(term_list[0]))--
                #Удоляем знак арифметики
                del term_list[0]
        
        
        #Вызераем в отдельный список последнее число
        Input_line_numbers.append(''.join(term_list[0:]))   
        #Удоляем последнее число из списка
        del term_list[0:]       
            
        for symbol in Input_line_numbers.copy():
            if symbol in ("+"):
                num1 = ''.join(Input_line_numbers[0:1])
                num2 = ''.join(Input_line_numbers[2:3])
                if not set(".").isdisjoint(num1) == True or\
                   not set(".").isdisjoint(num2) == True:
                    result = float(num1) + float(num2)
                    result = round(result, 1)
                    result = str(result)
                else:
                    try:
                        result = int(num1) + int(num2)
                    except ValueError:
                        print('\n\n   Нет числа после ариф.действия!')
                        return 'break'
                    
                    result = round(result)
                    result = str(result)
                
                del Input_line_numbers[0:3]
                Input_line_numbers.insert(0,result)
            
            if symbol in ("-"):
                num1 = ''.join(Input_line_numbers[0:1])
                num2 = ''.join(Input_line_numbers[2:3])
                if not set(".").isdisjoint(num1) == True or\
                   not set(".").isdisjoint(num2) == True:
                    result = float(num1) - float(num2)
                    result = round(result, 1)
                    result = str(result)
                else:
                    try:
                        result = int(num1) - int(num2)
                    except ValueError:
                        print('\n\n   Нет числа после ариф.действия!')
                        return 'break'
                    result = round(result)
                    result = str(result)
                
                del Input_line_numbers[0:3]
                Input_line_numbers.insert(0,result)
            
            if symbol in ("*"):
                num1 = ''.join(Input_line_numbers[0:1])
                num2 = ''.join(Input_line_numbers[2:3])
                if not set(".").isdisjoint(num1) == True or\
                   not set(".").isdisjoint(num2) == True:
                    result = float(num1) * float(num2)
                    result = round(result, 2)
                    result = str(result)
                else:
                    try:
                        result = int(num1) * int(num2)
                    except ValueError:
                        print('\n\n   Нет числа после ариф.действия!')
                        return 'break'
                    
                    result = round(result)
                    result = str(result)
                del Input_line_numbers[0:3]
                Input_line_numbers.insert(0,result)
                
            if symbol in ("/"):
                num1 = ''.join(Input_line_numbers[0:1])
                num2 = ''.join(Input_line_numbers[2:3])
                if not set(".").isdisjoint(num1) == True or\
                   not set(".").isdisjoint(num2) == True:
                    result = float(num1) / float(num2)
                    result = str(result)
                else:
                    try:
                        result = int(num1) // int(num2)
                    except ValueError:
                        print('\n\n   Нет числа после ариф.действия!')
                        return 'break'
                    result = round(result)
                    result = str(result)
                
                del Input_line_numbers[0:3]
                Input_line_numbers.insert(0,result)
        
        Decision.delete(0, END)
        Decision.insert(END, result)
        Expression.delete("1.0", END)
        break





#-------------------------------------------------------------------------------
# Создаем фреймы
Expression_line = Frame(root, background='olivedrab',  # Выражение 
                        width = 205, height = 44)     
Decision_line = Frame(root, background='olivedrab',    # Решение
                      width = 205, height = 33)      
First_line = Frame(root, background='olivedrab',       # 7 8 9 +    
                   width = 205, height = 44)         
Second_line = Frame(root, background='olivedrab',      # 4 5 6 -
                    width = 205, height = 44)         
Third_line = Frame(root, background='olivedrab',       # 1 2 3 *
                   width = 205, height = 44)          
Fourth_line = Frame(root, background='olivedrab',      # ← 0 c /
                    width = 205, height = 44)         
Fifth_line = Frame(root, background='olivedrab',       #   =   ,
                   width = 205, height = 44)          
#-------------------------------------------------------------------------------




#_Выражение_____________________________________________________________________
Expression = Text(Expression_line, background = "gainsboro", font = "Arial 9",
                  foreground = "black", width = 25)
def check_keys(event):
    if event.char.isalpha() or (event.state & 4 and event.keysym == "v"):
        return "break"

Expression.bind("<Key>", check_keys)
#-------------------------------------------------------------------------------
#_Решение_______________________________________________________________________
Decision = Entry(Decision_line, background = "gainsboro", 
                 foreground = "black", font = "Arial 13", width = 17)
Decision.bind("<Key>", check_keys)
#-------------------------------------------------------------------------------



#_7_____________________________________________________________________________
Seven = Button(First_line, text = "7", background = "#444", 
               foreground = "white", font = "Arial 14", width = 3,
               command = lambda: Decision.insert(END, "7"))
#_8_____________________________________________________________________________
Eight = Button(First_line, text = "8", background = "#444", 
               foreground = "white", font = "Arial 14", width = 3,
               command = lambda: Decision.insert(END, "8"))
#_9_____________________________________________________________________________
Nine = Button(First_line, text = "9", background = "#444", 
               foreground = "white", font = "Arial 14", width = 3,
               command = lambda: Decision.insert(END, "9"))
#_+_____________________________________________________________________________
# Создание кнопки +
Plus = Button(First_line,                  # Нахождение во фрейме
              text = "+",                  # Текст кнопки 
              background = "#555",         # Фоновый цвет кнопки
              foreground = "white",        # Цвет текста
              font = "Arial 12",           # Высота шрифта
              width = 3,                   # Высота кнопки
              height = 1,                  # Ширина кнопки
              command = Plus_Act           # Функция кнопки
              )
#-------------------------------------------------------------------------------



#_4_____________________________________________________________________________
Four = Button(Second_line, text = "4", background = "#444", 
              foreground = "white", font = "Arial 14", width = 3,
              command = lambda: Decision.insert(END, "4"))
#_5_____________________________________________________________________________
Five = Button(Second_line, text = "5", background = "#444", 
              foreground = "white", font = "Arial 14", width = 3,
              command = lambda: Decision.insert(END, "5"))
#_6_____________________________________________________________________________
Six = Button(Second_line, text = "6", background = "#444", 
              foreground = "white", font = "Arial 14", width = 3,
              command = lambda: Decision.insert(END, "6"))
#_-_____________________________________________________________________________
Minus = Button(Second_line, text = " - ", background = "#555", 
               foreground = "white", font = "Arial 12", width = 3, 
               height = 1, command = Minus_Act) 
#-------------------------------------------------------------------------------



#_1______________________________________________________________________________
One = Button(Third_line, text = "1", background = "#444", 
             foreground = "white", font = "Arial 14", width = 3,
             command = lambda: Decision.insert(END, "1"))
#_2______________________________________________________________________________
Two = Button(Third_line, text = "2", background = "#444", 
             foreground = "white", font = "Arial 14", width = 3,
             command = lambda: Decision.insert(END, "2"))
#_3______________________________________________________________________________
Three = Button(Third_line, text = "3", background = "#444", 
               foreground = "white", font = "Arial 14", width = 3,
               command = lambda: Decision.insert(END, "3"))
#_*______________________________________________________________________________
Mult = Button(Third_line, text = " * ", background = "#555", 
              foreground = "white", font = "Arial 12", width = 3, 
              command = Mult_Act) 
#--------------------------------------------------------------------------------



#_←_____________________________________________________________________________
Clear_symbol = Button(Fourth_line, text = "←", background = "#555", 
                      foreground = "white",font = "Arial 14", width = 3,    
                      command = lambda: Decision.delete("end-3c"))
#_0_____________________________________________________________________________
Zero = Button(Fourth_line, text = "0", background = "#444", 
              foreground = "white",font = "Arial 14", width = 3, 
              command = lambda: Decision.insert(END, "0"))
#_с_____________________________________________________________________________
Clear_fields = Button(Fourth_line, text = "с", background = "#555", 
                      foreground = "white", font = "Arial 14", width = 3,  
                      command = Clear_fields_Act)
#_/_____________________________________________________________________________ 
Division = Button(Fourth_line, text = " / ", background = "#555", 
                  foreground = "white", font = "Arial 12", width = 3, 
                  command = Division_Act)
#-------------------------------------------------------------------------------



#_=_____________________________________________________________________________
Pixel_Virtual = tk.PhotoImage(width = 1)
Equally = Button(Fifth_line, text = "=", background = "#555", 
                 command = Equally_Act, image = Pixel_Virtual, compound = 'c',
                 foreground = "white", font = "Arial 12", width = 147,)
#_,_____________________________________________________________________________
Comma = Button(Fifth_line, text = ".", background = "#555", 
               foreground = "white", font = "Arial 12", width = 3,
               command = lambda: Decision.insert(END, "."))
#-------------------------------------------------------------------------------




#-------------------------------------------------------------------------------
# Указываем выравнивание обьекта во фрейме и его отображение в окне
Expression.pack(side = LEFT, padx = 2, pady = 2)       # Выражение
Decision.pack(side = LEFT, padx = 2, pady = 2)         # Решение  

Seven.pack(side = LEFT, padx = 2, pady = 2)            # 7
Eight.pack(side = LEFT, padx = 2, pady = 2)            # 8
Nine.pack(side = LEFT, padx = 2, pady = 2)             # 9
Plus.pack(side = LEFT, padx = 2, pady = 2)             # +

Four.pack(side = LEFT, padx = 2, pady = 2)             # 4
Five.pack(side = LEFT, padx = 2, pady = 2)             # 5
Six.pack(side = LEFT, padx = 2, pady = 2)              # 6
Minus.pack(side = LEFT, padx = 2, pady = 2)            # -

One.pack(side = LEFT, padx = 2, pady = 2)              # 1
Two.pack(side = LEFT, padx = 2, pady = 2)              # 2
Three.pack(side = LEFT, padx = 2, pady = 2)            # 3
Mult.pack(side = LEFT, padx = 2, pady = 2)             # *

Clear_symbol.pack(side = LEFT, padx = 2, pady = 2)     # ←
Zero.pack(side = LEFT, padx = 2, pady = 2)             # 0
Clear_fields.pack(side = LEFT, padx = 2, pady = 2)     # c
Division.pack(side = LEFT, padx = 2, pady = 2)         # /

Equally.pack(side = LEFT, padx = 2, pady = 2,
             expand = 1, fill = Y)                     # =
Comma.pack(side = BOTTOM, padx = 2, pady = 2)          # ,
#-------------------------------------------------------------------------------


# Включаем отображение фрейма в окне
Expression_line.pack(anchor = W)                  # N - Север   ↑
Expression_line.pack_propagate(False)             # S - Юг      ↓

Decision_line.pack(anchor = W)                    # W - Запад   ←
Decision_line.pack_propagate(False)               # E - Восток  →

First_line.pack(anchor = W)         
First_line.pack_propagate(False)

Second_line.pack(anchor = W)        
Second_line.pack_propagate(False)

Third_line.pack(anchor = W)         
Third_line.pack_propagate(False)

Fourth_line.pack(anchor = W)        
Fourth_line.pack_propagate(False)

Fifth_line.pack(anchor = W)   
Fifth_line.pack_propagate(False)   
  



# Реализация бесконечного цикла окна (работа окна)
root.mainloop()
python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-12-11 13:58:34 +0000 UTC

Windows 不会更改 .py 文件的默认程序

  • 1

重新安装python,将您需要的所有内容写入PATH变量

在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我将带有脚本的文件夹放入带有 python 的文件夹中(就像以前一样),我还在 PATH 变量中注册了它,以便我可以通过 cmd 运行它

在此处输入图像描述

在此处输入图像描述

但是由于某种原因,windows没有看到.py脚本的扩展名,即它没有使用python.exe打开文件,而是通过PCM打开并手动选择程序

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

但是选择之后python.exe,什么都没有发生,默认启动器没有改变,没有出现在推荐的启动器中,通过IDLE所有脚本运行并工作

在此处输入图像描述

在此处输入图像描述

默认情况下,在尝试更改和指定 python.exe 时,程序中指定了 Notepad ++,重复我上面指出的故事

在此处输入图像描述

谷歌爬出来的都没有找到解决办法,谁知道是怎么回事?

python
  • 2 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-12-03 22:03:18 +0000 UTC

如何防止在 Text() tkinter 文本小部件中输入某些字符?

  • 1

我想知道如何禁止某些字符的实时输入?比如字母,这样当你点击符号对应的按键时,widget里面什么都没有显示,怎么实现呢?

在此处输入图像描述

from tkinter import *
root = Tk()
root.title('Python')
root.geometry('158x55')
root.resizable(width = False, height = False)

    
First_line = Frame(root, background='olivedrab')    

Expression = Text(First_line, background = "silver", foreground = "black",
                  width = 17, height=3)

Expression.pack(side = LEFT, padx = 2, pady = 2) 

First_line.pack(anchor = W)  


root.mainloop()
python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-12-03 17:08:20 +0000 UTC

如何从 Text() tkinter 小部件中删除最后一个字符?

  • 1

Expression单击按钮时如何删除输入行中的最后一个字符Clear_symbol?我试图用这个词来指定索引END,但是没有用。

from tkinter import *
root = Tk()
root.title('Python')
root.geometry('158x55')
root.resizable(width = False, height = False)


def Clear_symbol_Act():
    Expression.delete(END)
    
        
First_line = Frame(root, background='olivedrab')    



Clear_symbol = Button(First_line, text = "←", background = "#555", 
                      foreground = "white",font = "25", width = 3, 
                      height = 1, command = Clear_symbol_Act)

Expression = Text(First_line, background = "silver", foreground = "black",
                  width = 17, height=3)



Clear_symbol.pack(side = LEFT, padx = 2, pady = 2)  
Expression.pack(side = LEFT, padx = 2, pady = 2) 

First_line.pack(anchor = W)  



root.mainloop()

在此处输入图像描述

python
  • 2 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-12-01 20:06:30 +0000 UTC

为什么for循环停止运行?

  • 1

我需要从列表中删除所有数字term_list,可以这么说,但由于某种原因,在我得到第一个数字并将其移动到单独的列表后,循环的迭代停止,它停止在符号处+,为什么是这发生了?

term_list =  ['2', '2', '+', '2', '2', '+', '2', '2']
Input_line_numbers = []

for n in term_list:
    print('   Я итерация цикла ')
    if n in ("+"):
        print('\n         Я ариф.действия: ',n)
        index = term_list.index(n)
        print('       Я индекс ариф.действия: ',index)
        Input_line_numbers.append(''.join(term_list[0:index]))
        print('       Я список чисел строки ввода: ',Input_line_numbers)
        del term_list[0:index+1]
        print('       Я список строки ввода: ',term_list,'\n')
        
print('\n\nЯ список строки ввода: ',term_list)

在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-11-30 17:40:36 +0000 UTC

为什么会有 IndentationError: expected an indented block error?[关闭]

  • 0
关闭 这个问题是题外话。目前不接受回复。

该问题是由不再复制的问题或错字引起的。虽然类似问题可能与本网站相关,但该问题的解决方案不太可能帮助未来的访问者。通常可以通过在发布问题之前编写和研究一个最小程序来重现问题来避免此类问题。

1 年前关闭。

改进问题
def Calculator():
    while True:
        term = Expression.get("1.0", END)
        term = term[0:-1]
        long_term = len(term)
        
        
        # Все индексы символов введеных пользователем
        index = []
        
        
        # Проводим проверку ввода пользователя
        if long_term > 0:
            # Получаем индекс каждого введеного пользователем символа
            while long_term > 0:
                long_term = long_term - 1
                index.insert(0,long_term)
        elif long_term == 0: 
            Expression.insert(END, '\nОшибка! Поле пусто\n')
            break
        
        
        # Все элементы строки введеной пользователем
        term_list = [term[i] for i in index]
        
        
        # Значение ариф.действия
        variable_arithmetic = ''
        # Индекс символа арифметики в списке term_list
        arithmetic_index = 0
        
        
        # Из списка term_list вырезаем арифметическое действие, а так же преобразовываем 
        # введеные пользователем данные обратно из списка, в числа\строки
        for a in term_list:
            if (a == '-' or a == '+' or a == '*' or a == '/'):
                # Узнаем индекс символа арифметики в списке term_list
                arithmetic_index = term_list.index(a, 0, len(term))
                # Присваиваем variable_arithmetic значение ариф.действия
                variable_arithmetic += a
                break
        # Проверка ввел ли пользователь ариф.действие
        if (variable_arithmetic == '-' or variable_arithmetic == '+' or
            variable_arithmetic == '*' or variable_arithmetic == '/'):
        else:
            print(variable_arithmetic)
            Expression.delete(1.0, END)
            Expression.insert(1.0, 'Ошибка! Нет \nарифметического \nзнака')
            break
        
        # Проверка, есть ли в том, что ввел пользователь число с плавоющей точкой
        true_float_num1 = not set(".").isdisjoint(term_list)
        if (true_float_num1 == True):
            # До индекса ариф.действия делаем вырезку из списка term_list
            num1 = term_list[0:arithmetic_index]
            # Преобразовываем вырезанные значения списка в строку
            try:
                num1 = float(''.join(num1))
            except ValueError:
                Expression.insert(END, '\nОшибка! Невозможно \nвычислить\n')
                break
        else:
            num1 = term_list[0:arithmetic_index]
            # Проверка ввел ли пользователь число\строку
            try:
                # Преобразовываем вырезанные значения списка в строку
                num1 = int(''.join(num1))   
            # Если пользователь ввел не число, то складываем строки без преобразования 
            # в числовое значение int, выполняя конкантенацию строк
            except ValueError:
                num1 = ''.join(num1)
        
        # Сдвигаем значение вырезки на один символ вправо
        arithmetic_index += 1
        
        
        true_float_num2 = not set(".").isdisjoint(term_list)
        if (true_float_num2 == True):
            # После индекса ариф.действия делаем вырезку из списка term_list
            num2 = term_list[arithmetic_index:]
            try:
                num2 = float(''.join(num2)) 
            except ValueError:
                Expression.insert(END, '\nОшибка! Невозможно \nвычислить\n')
                break
        else:   
            num2 = term_list[arithmetic_index:]
            try:
                num2 = int(''.join(num2))
            except ValueError:
                num2 = ''.join(num2)

我不明白我在哪里犯了制表错误,请告诉我,我在第 58 行看到了,但我不明白出了什么问题在此处输入图像描述

python
  • 3 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-11-23 18:45:54 +0000 UTC

如何在列表生成器中指定多个操作?

  • 0

例如,有一段代码:

n = 0
for a in index:
    # Операция №1
    term_list.insert(n,term[a])
    # Операция №2
    n += 1

还有一个代码(列表生成器):

n = 0                      # Операция №1
term_list_Search = [term_list.insert(n,term[a]) for a in index]

事实上,它们可能是相同的。但这里是如何添加到第二个代码,Операция №2即 2 个动作而不是 1 个?

整个代码:

while True:
    term = input('| Введите выжарение: ')
    long_term = len(term)
    
    # В списке index хранится все индексы символов введеных пользователем
    index = []
    # Получаем индекс каждого введеного пользователем символа
    if long_term > 0:
        while long_term > 0:
            long_term = long_term - 1
            index.insert(0,long_term)
            print('| ',index)
    elif long_term == 0: 
        print('| Ошибка! Поле ввода пусто', '\n|')
        continue
    
    # В списке term_list хранятся все элементы строки введеной пользователем
    term_list = []
    # Записываем в список term_list все элементы строки введеной пользователем
    
    print('|\n|')
    n = 0
    for a in index:
        term_list.insert(n,term[a])
        n += 1
        print('| ',term_list)
    

脚本示例:

在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-10-30 20:39:39 +0000 UTC

如何在没有缩进的情况下在while循环中的输入函数中换行?

  • 2
import sys

while True:
    Warning = input('Если вы хотите заархивировать файлы не находящиеся\
    в главном каталоге, \nвведите полные пути этих файлов как аргумент\
    для командной строки,\nчерез пробел, перед запуском программы. \
    \n\nПродолжить архивацию: -\nВыйти из программы: +\
    \nВведите команду: ')
    
    if Warning == str('+'):
        sys.exit
    elif Warning == str('-'):
        break

在此处输入图像描述

问题是我放行\和断行后,单词之间有很大的空格,如何解决?

python
  • 3 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-10-26 20:34:13 +0000 UTC

错误(OSError:[WinError 123]),是什么原因造成的?

  • 0
import os
import time

#Откуда копируем
source = ['"D:\Miscellanea\Резервные копии"']

#Куда копируем
target_dir = '"D:\Miscellanea\Backup Archive"'


#Название папки с сохраненым архивом резервных данных, в формате: 
#%Месяц%День%Год
today = target_dir + os.sep + time.strftime('%m.%d.%Y')

#Создание имени zip-архива в формате %Час%Минута
now = time.strftime('%H-%M')


#Если в целевой папке нет каталога, создаем его
if not os.path.exists(today):
    os.mkdir(today)

print('Идет процесс создания архива резервных данных, пожалуйста подождите...')


#Присваиваем имя архиву
target = today + os.sep + now + '.zip'


zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

if os.system(zip_command) == 0:
    print('Архив резервных копий успешно создан в', target)
else:
    print('Создание архива резервных копий НЕ УДАЛАСЬ')

在此处输入图像描述

我看到它在第 20 行发誓,我什至知道如何修复它,将文件夹名称从更改Backup Archive为BackupArchivethat is,删除空格,然后一切都会工作,但我有一个问题,发生这种情况的原因是什么,因为一切都是在代码中按顺序,有空格的路径需要写入"",已经完成,那么为什么会发生错误?你怎么能绕过它? 在此处输入图像描述

python
  • 2 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2021-10-21 19:28:05 +0000 UTC

归档数据的程序不工作(从书中的一个例子工作)

  • 0

解决了书中的问题,第一个程序举个例子,这是一个数据归档程序,我输入的和书中的完全一样,只是我改变了目录的路径,没有成功。下面是程序的代码,在有评论的行上面,我弄清楚了发生了什么,评论在哪里结束,我再也想不通了,谷歌没有帮助。运行此代码时,不会创建存档,甚至命令行上都没有错误,程序在启动后立即停止工作。

import os
import time

#Откуда копируем
source = ['"D:\Miscellanea\Резервные копии"']

#Куда копируем
target_dir = '"D:\Miscellanea\Programmig\Programming-Python\Python\Project\Backup programm\Backup archive"'

#Название сохраненого архима резервных данных, в формате: 
#путь к резервным данным + // + %Год%Месяц%День%Час%Минута%Секундна + формат файла (.zip)
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'


zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))


if os.system(zip_command) == 0:
    print('Архив резервных копий создан в', target)
else:
    print('Создание резервной копии НЕ УДАЛАСЬ')

Python v3.8.1,Windows 7(64) 旗舰版

代码和命令行 #2 的图像 同样在书中他们谈到需要安装gnuwin32并设置Patch变量的路径,类比python本身在安装过程中的规定,一切都规定了,下面的屏幕 在此处输入图像描述 也是Patch变量,完整的值变量:D:\Miscellanea\Programmig\Programming-Python\Python\Scripts\;D:\Miscellanea\Programmig\Programming-Python\Python\;D:\Miscellanea\programmig\Programming Python\Python\Scripts\;D:\Miscellanea\programmig\Programming Python\Python\;D:\Miscellanea\programmig\Python\Python\Scripts\;D:\Miscellanea\programmig\Python\Python\;%PyCharm Community Edition%;D:\Miscellanea\Programmig\Programming-Python\Python\Project\Backup programm;D:\Program\GnuWin32\bin

在此处输入图像描述

python
  • 2 个回答
  • 10 Views
Martin Hope
Анатолий Михеенко
Asked: 2020-10-09 18:27:04 +0000 UTC

具有可变数量参数的函数 *args

  • 0

我正在阅读“Python's Bite”一书,正在阅读“功能”主题,我无法理解示例中的代码是如何工作的。我尝试一步一步地在解释器中查看这段代码的执行——这并没有增加清晰度。

在我看来,它应该是这样的。我显然误解了一些东西,请纠正我。当函数被调用时,参数extra_numbers被赋值为 50,*numbers值被放置在 中(10, 1, 2, 3),参数initial = 5没有以任何方式改变,然后函数体被执行,在我看来如下:

  1. 变量count被赋予参数的值initial,即5。
  2. 循环for中的下一个是变量值参数的枚举,*numbers循环体,在循环的每次迭代中存储在变量中number。
  3. 在循环的第一次迭代中,for参数的第一个参数被获取*numbers,也就是说10,并添加到变量的值中count。它是15通过将变量count本身的值更改为15.
  4. 在循环的第二次迭代中,取for参数的第二个参数*numbers,也就是1和变量的值相加count,也就是有了值15,变量接收到一个新的值16,里面存储了
  5. 在循环的第三次迭代中,与 1. 和 2. 示例中发生的情况类似,即变量在循环的下一次迭代count之前和之后发生了变化1821
  6. 然后循环for停止工作,执行下一个函数表达式total,即count += extra_numbers根据结果为变量count赋值71,因为它在循环结束时的值为 18,而参数的extra_numbers值为50。现在的问题是,66 是从哪里来的,我哪里出错了?
def total(initial = 5, *numbers, extra_numbers):
    count = initial
    for number in numbers:
        count += number
    count += extra_numbers
    print(count)
    
total(10, 1, 2, 3, extra_numbers = 50)

#Вывод в консоль: 66
python
  • 2 个回答
  • 10 Views

Sidebar

Stats

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

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 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